我创建了一个shell脚本来检查tomcat实例状态。如果实例未启动,则启动它:
if [ `ps -ef | grep 'travelco' | grep -v grep | wc -l` -eq 0 ];then
sudo /home/q/tools/bin/restart_tomcat.sh /home/www/travelco/
else
echo 'travelco started'
fi
然后我测试了脚本并且运行良好。但是在我把它添加为crond工作之后,这个脚本并没有像预期的那样工作。
我使用了crontab -e
,并添加了
*/1 * * * * /home/yuliang.jin/travelcoCheck.sh
之后,即使我可以看到在crontab日志(sudo tail -f /var/log/cron
)中执行的脚本,tomcat实例也没有启动。为什么呢?
答案 0 :(得分:2)
您的脚本中有sudo
,但您确定当前用户是否有权在没有密码身份验证的情况下执行/home/q/tools/bin/restart_tomcat.sh
?
您应该将脚本添加到/etc/sudoers
以允许当前用户无需密码即可执行脚本,或者您只需sudo crontab -e
以root身份运行脚本(并且不要忘记如果您这样做,请删除脚本中的sudo
。
答案 1 :(得分:1)
如果还有其他选择,请不要参加cron工作。
travelcoCheck.sh
将与grep travelco
匹配,grep -v grep
不会取消,因此wc -l
将始终至少为1。所以restart_tomcat.sh
将无法运行。
(作为旁注:你的ps
- 解析堆栈是否被ps
捕获是一种黑暗艺术,充满了极端情况和竞争条件,而且通常很难达到这就是为什么dbus
被发明了。)