我想要一个cronjob来检查我的.pl程序是否在它运行之前运行。 我创建了一个ms1000.sh程序。
#!/bin/sh
# check MSSocket1000 process
ps -ef | grep -v grep | grep MSSocket1000.pl
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
perl /home/application/MSSocket1000.pl &
else
echo "MSSocket2000 is running..."
fi
然后在我的crontab
中55 09 * * * /home/application/ms1000.sh
尝试了很多次,但即使我通过ps -ef | grep MSSocket1000.pl查看它也没有运行,它似乎也没有运行MSSocket1000.pl。
想知道我做错了什么。 感谢。
答案 0 :(得分:0)
最好检查0并翻转if逻辑,因为失败编号不总是1.它可以是1到127之间的任何数字。
if [ $? -eq 0 ]
then
echo "MSSocket2000 is running..."
else
perl /home/application/MSSocket1000.pl &
fi
最好使用pgrep
代替ps ... | grep
。
pgrep -f MSSocket1000.pl
最好在if条件下直接使用命令。
if pgrep -f MSSocket1000.pl
then
echo "MSSocket2000 is running..."
else
perl /home/application/MSSocket1000.pl &
fi
最后但同样重要的是:缩进代码是件好事。
if pgrep -f MSSocket1000.pl
then
echo "MSSocket2000 is running..."
else
perl /home/application/MSSocket1000.pl &
fi
Nitpick:使用printf
代替echo
。
printf '%s\n' "MSSocket2000 is running..."