我有两个systemd
要在启动时运行的脚本。
第一个 systemd 脚本启动 OpenVPN,然后执行一个 shell 脚本,将连接的 IP 写入文件
vpn.env
。第二个 systemd 脚本启动 Transmission 并应绑定到 中的 IP 地址
vpn.env
。
我的问题似乎是第二个 systemd 脚本的执行太“快”,并且在 OpenVPN 可以启动和写入之前完成vpn.env
。
问题:有没有办法为第二个脚本添加延迟(也许几秒钟),并让它等待环境文件被写入?
systemd OpenVPN 脚本
[Unit]
Description=VPN Custom Launch Connection
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn --config /etc/openvpn/vpn.conf
[Install]
WantedBy=multi-user.target
OpenVPN .sh 脚本,程序启动时执行
printenv > /etc/openvpn/vpn.env
systemd 传输脚本
[Unit]
Description=Transmission BitTorrent Daemon Under VPN
After=network.target vpn.service
Requires=vpn.service
[Service]
User=transmission
Type=notify
EnvironmentFile=/etc/openvpn/vpn.env
ExecStart=/usr/bin/transmission-daemon -f --log-error --config-dir /opt/transmission --bind-address-ipv4 $ifconfig_local --rpc-bind-address 0.0.0.0 --no-portmap
ExecReload=/bin/kill -s HUP $MAINPID
[Install]
WantedBy=multi-user.target
答案1
答案2
您可以添加延迟:https://stackoverflow.com/q/43001223/32453
或者可以在您的 systemd OpenVPN 服务文件中执行此操作:
ExecStartPost=/bin/bash -c 'do_bash_loop_that_waits_till_file_appears_here'
另一个选择:创建一个 systemd.path 单元文件。也许每当创建或更改 vpn.env 文件时都会触发它。