Bash脚本可以手动运行php脚本,但不能在Cron中工作

时间:2019-03-20 11:25:53

标签: bash cron php-5.6

我有一个像这样的bash脚本:

#!/bin/bash

log_file=/home/michael/bash/test.log

checkalive=checkalive.php

#declare
needRestart=0

#Check checkalive.php

is_checkalive=`ps aux | grep -v grep| grep -v "$0" | grep $checkalive| wc -l | awk '{print $1}'`

if [ $is_checkalive != "0" ] ;
then

    checkaliveId=$(ps -ef | grep $checkalive | grep -v 'grep' | awk '{ printf $2 }')

    echo "Service $checkalive is running. $checkaliveId"

else

    echo "$checkalive OFF"
    needRestart=1

fi

#NEED needRestart

if [ $needRestart == "1" ];
then
    #START SERVICE
    echo "Restarting services..."

    /usr/bin/php5.6 /home/michael/bash/$checkalive >/dev/null 2>&1 &
    echo "$checkalive..."
    echo `date '+%Y-%m-%d %H:%M:%S'` " Start /home/michael/bash/$checkalive" >> $log_file
fi

我可以手动运行它,但是当我尝试在Cron中运行它时,由于某些原因,它不起作用。显然该命令:

/usr/bin/php5.6 /home/michael/bash/$checkalive >/dev/null 2>&1 &

不起作用。

所有文件权限已设置为可执行文件。有什么建议吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您遇到了cron最常见的错误之一,试图像任意shell脚本一样使用它。 Cron is not a shell script,您将无法完成所有工作,例如取消引用变量或设置任意新变量。

我建议您将值替换为cron行,并避免使用变量

/usr/bin/php5.6 /home/michael/bash/checkalive.php >/dev/null 2>&1 &

此外,请考虑删除尾随&,因为这是不必要的。