【发布时间】:2015-02-16 04:16:01
【问题描述】:
我写了一个小脚本来检查openvpn是否正在运行,如果没有就启动它。
这是我正在运行的脚本
#!/bin/bash **-x**
ps auxw | grep openvpn | grep -v grep > /dev/null
if [ $? != 0 ]
then
/etc/init.d/openvpn start > /dev/null
log="/root/ServerRestart.log"
echo "The Openvpn Server was restarted at\n" > $log
date >> $log
fi
这里是 crontab:
* * * * * /root/vpnmonitor.sh
它在 syslog 中显示它运行脚本但它似乎并没有实际执行,从终端运行时脚本工作正常。
【问题讨论】:
-
您可能会发现通过stackoverflow.com/tags/crontab/info 中的“调试 crontab”很有用很多问题都在那里得到了很好的描述。
-
**-x**在你的 shebang 中是什么意思? -
这显然使错误更加冗长
-
很少有建议:对于数字比较,您不应该使用 -ne (例如 [ $? -ne 0 ] )而不是 != 。还要确保您对脚本具有执行权限。至少在两次执行脚本之间保持一些时间间隔..我看到所有 *
-
首先,$?来自管道中的最后一个 grep 语句。所以,我不明白为什么你的代码是正确的。 pgrep 存在于许多 UNIX 变体中,包括 ubuntu。用
pgrep openvpn替换管道,或者你喜欢管道,使用${PIPESTATUS[*]}数组。我认为您的代码每次运行时都会重新启动 openvpn。当 ti 实际运行时 - @fedorqui 很可能是几个问题中的第一个。
标签: linux bash unix ubuntu cron