当前脚本:
start on (net-device-up
and local-filesystems
and runlevel [2345]
and started rsyslog)
stop on runlevel [!2345]
respawn
exec /usr/sbin/openvpn --config /etc/openvpn/devops/config
问题是如果由于某些原因启动失败:
Sep 24 01:55:07 p vpn-devops[5075]: Cannot load certificate file /etc/openvpn/devops/server.crt: error:02001002:system library:fopen:No such file or directory
: error:20074002:BIO routines:FILE_CTRL:system lib: error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib
Sep 24 01:55:07 p vpn-devops[5075]: Exiting
新贵仍然认为它已启动并立即以0状态退出。
我的第一次尝试:
post-start script
for try in $(seq 9); do
if [ nc -q0 -zu localhost 1194 ]; then
exit 0
fi
sleep 1
done
exit 1
end script
我以为它将起作用,但实际上却没有。原因是退出代码被忽略的post-start
。
我的第二次尝试:
expect fork
respawn
pre-start script
/usr/sbin/openvpn --config /etc/openvpn/devops/config
if [ $? -ne 0 ]; then
exit 1
fi
end script
script
while kill -0 $(cat /var/run/openvpn/devops.pid); do
sleep 1
done
end script
现在,如果发生故障,退出状态是正确的:
start openvpn-devops
start: Job failed to start
echo $?
1
但start
在正常情况下会挂起(不返回shell提示),尽管pid跟踪正确:
status openvpn-devops
openvpn-devops start/pre-start, process 7565
cat /var/run/openvpn/devops.pid
7565
如果我使用同一件事发生了:
expect daemon
/usr/sbin/openvpn --config /etc/openvpn/devops/config --daemon
我的第三次尝试:
expect fork
exec /usr/sbin/openvpn --config /etc/openvpn/devops/config --daemon
然后start
工作,但它跟踪错误的pid,因为派生的数量不正确:
start openvpn-devops
openvpn-devops start/running, process 7720
status openvpn-devops
openvpn-devops start/running, process 7720
cat /var/run/openvpn/devops.pid
7715
ps -ef | grep vpn
nobody 7715 1 0 02:41 ? 00:00:00 /usr/sbin/openvpn --config /etc/openvpn/devops/config --daemon
我做错什么了?
当前的脚本是正确的,它可以执行该操作。
第二个脚本永远挂起,因为/usr/sbin/openvpn --config /etc/openvpn/devops/config
永远不会退出,它在前台运行。
第三个脚本也会挂起,但是因为openvpn --daemon
只有一次分叉。
expect daemon /usr/sbin/openvpn --config /etc/openvpn/devops/config --daemon
expect fork
如果配置文件正确,则将其更改为可以工作。如果配置文件错误,则openvpn不会派生,因此将无法正常工作。
TL; DR:只需坚持使用当前脚本即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句