用于检查.pl进程的Unix命令正在运行

时间:2015-02-05 09:18:37

标签: bash unix sh crontab

我想要一个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。

想知道我做错了什么。 感谢。

1 个答案:

答案 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..."