我有一个 systemd 服务来设置我的 openvpn 隧道。我还有一个 bash 脚本,用于转发所述隧道的端口。我想让脚本在 openvpn 启动后运行,并且我已经能够通过 ExecStartPost 调用我的端口转发脚本来做到这一点。唯一的问题是 systemd 服务是 Type=forking,而且 ExecStartPost 似乎也必须是 forking,但事实并非如此,所以当我尝试重新启动 systemd 服务时,它永远挂起,大概是在等待端口转发脚本守护进程。是否可以通过其他方式从 systemd 服务执行端口转发脚本?或者是否有可能让两个服务同时运行(例如,一个服务严格在另一个服务之后执行,并且重新启动也同步发生)?我只在启动 VPN 隧道时运行端口转发脚本,因此我希望它自动运行。这是有问题的 systemd 服务文件:
[Unit]
Description=OpenVPN connection to %i
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO
After=network.target
[Service]
RuntimeDirectory=openvpn
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid
#ExecStartPost=/etc/openvpn/portforward.sh
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
Restart=on-failure
RestartSec=3
ProtectSystem=yes
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
[Install]
WantedBy=multi-user.target