我有一个像这样的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 &
不起作用。
所有文件权限已设置为可执行文件。有什么建议吗?
谢谢
答案 0 :(得分:0)
您遇到了cron最常见的错误之一,试图像任意shell脚本一样使用它。 Cron is not a shell script,您将无法完成所有工作,例如取消引用变量或设置任意新变量。
我建议您将值替换为cron行,并避免使用变量
/usr/bin/php5.6 /home/michael/bash/checkalive.php >/dev/null 2>&1 &
此外,请考虑删除尾随&
,因为这是不必要的。