【问题标题】:Unix command to check .pl process is running用于检查 .pl 进程的 Unix 命令是否正在运行
【发布时间】:2015-04-05 02:01:15
【问题描述】:

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

尝试了很多次,但它似乎没有运行 MSSocket1000.pl,即使我通过 ps -ef|grep MSSocket1000.pl 检查它也没有运行。

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

【问题讨论】:

  • 你可能需要使用 perl 的完整路径?
  • 你确定每次$? 都是1吗?我认为你可以使用这样的。 $? -gt 0 。只是一个建议。

标签: bash unix sh crontab


【解决方案1】:

最好检查 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..."

【讨论】:

    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多