openvpn 터널을 설정하는 시스템 서비스가 있습니다. 또한 해당 터널의 포트를 전달하는 bash 스크립트도 있습니다. openvpn이 시작된 후 스크립트가 실행되기를 원하며 ExecStartPost를 통해 포트 전달 스크립트를 호출하여 이 작업을 수행할 수 있었습니다. 유일한 문제는 systemd 서비스가 Type=forking이고 ExecStartPost도 포크해야 하는 것 같지만 그렇지 않기 때문에 systemd 서비스를 다시 시작하려고 하면 영원히 멈추고 포트를 기다리는 것 같습니다. 전달 스크립트 데몬. systemd 서비스에서 포트 전달 스크립트를 실행하는 다른 방법이 있습니까? 아니면 두 서비스를 동시에 실행하는 것이 가능합니까(예: 한 서비스가 다른 서비스 다음에 엄격하게 실행되고 다시 시작도 동기적으로 발생함)? VPN 터널을 시작할 때만 포트 전달 스크립트를 실행하므로 자동으로 실행되기를 원합니다. 문제의 시스템 서비스 파일은 다음과 같습니다.
[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