Bash 脚本可以 运行 php 手动编写脚本但不能在 Cron 中运行

Bash Script can run php script manually but cannot work in Cron

我有一个这样的 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 "[=13=]" | grep $checkalive| wc -l | awk '{print }'`

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

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

    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 &

无效。

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

谢谢

您 运行 犯了 cron 最常见的错误之一,试图像任意 shell 脚本一样使用它。 Cron is not a shell script 并且您无法将您可以做的所有事情都集中在一处,例如取消引用变量或设置任意新变量。

我建议您将您的值替换到 cron 行中并避免使用变量

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

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