Linux Cronjob未运行bash脚本
我已经编写了一个小脚本来检查openvpn是否正在运行,如果没有,则启动它 这是我正在运行的脚本Linux Cronjob未运行bash脚本,linux,bash,unix,ubuntu,cron,Linux,Bash,Unix,Ubuntu,Cron,我已经编写了一个小脚本来检查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
#!/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
它在系统日志中显示它运行脚本,但它似乎没有实际执行,当从终端运行时,脚本工作正常。我在/etc/crontab中创建了一个新的cronjob,而不是使用
crontab-e
,它现在可以工作了,谢谢大家。openvpn服务不会在没有正确路径的情况下启动。
尝试在“vpnmonitor.sh”中包括:
比如:
您可能会发现在许多问题中使用“调试crontab”是很有用的。在您的shebang中,
**-x**
意味着什么?它显然会使错误更加详细一些建议:对于数字比较,您不应该使用-ne(例如[$?-ne 0])而不是!=。还要确保您对脚本具有执行权限。至少在2次执行脚本之间保持一定的时间间隔..我首先看到所有*First off,$?来自管道中的最后一条grep语句。所以,我不明白为什么你的代码是正确的。pgrep存在于许多UNIX变体上,包括ubuntu。将管道替换为pgrep openvpn
,或者您喜欢管道,请使用${PIPESTATUS[*]}
数组。我认为您的代码每次运行时都会重新启动openvpn。当ti实际运行时,@fedorqui很可能出现几个问题中的第一个。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
logger "VPN restarted from cron"
/etc/init.d/openvpn restart vpn-servername