使用shell脚本检查nohup服务是否正在运行?

时间:2015-12-04 06:18:43

标签: shell nohup

我在putty中使用下面的命令创建了一个nohup服务。

 nohup php /var/www/html/XYZ/sample.php &

此命令在后台执行sample.php文件。

现在我需要的是我想要一个shell脚本来检查这个服务是否正在运行。如果服务没有运行,我想让shell脚本自己创建一个服务。下面是我试过的代码。

    #!/bin/bash
    email_to="xyz@gmail.com";
    export DISPLAY=:0.0
    PIDS=`ps -aux | grep sample.php|awk '{print $2}'`
    if [ -z "$PIDS" ]; then
       echo "$(date) - The service is not running. Sending email to :$email_to" >> /var/www/html/XYZ/sample.php;
       echo "SERVICE is not running - $(date)" | mail -s "service is not running - $(date)" $email_to
       echo "" >> /var/www/html/XYZ/sample.php;
       exit 1
    else
       echo "$(date) - Service already running.  Sending email to : $email_to" >> /var/www/html/XYZ/sample.php;
       echo "SERVICE is running - $(date)" | mail -s "SERVICE is  running - $(date)" $email_to
    fi

当我执行文件时,我收到邮件,因为服务正在运行,一旦我杀死了sample.php,当我执行这个文件时,我收到相同的邮件"当服务正在运行"但它错了,所以有人可以指导我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

  

我哪里出错了?

ps -aux | grep sample.php grep在其自己的流程命令行sample.php中找到grep sample.php,也由ps输出。这可以通过修改grep命令来避免,这样它就不会包含sample.php字面意思,例如e。 G。 grep 'sample\.php'(这样可以避免匹配另一个字符而不是.)的风险。您可能还需要ps的宽输出才能截断命令,因此请将上述管道更改为ps waux | grep 'sample\.php'