我有一个这样的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 &
不起作用。
所有文件权限都已设置为可执行文件。有什么建议吗?
谢谢
发布于 2019-03-21 04:00:15
您遇到了cron最常见的错误之一,试图像使用任意shell脚本一样使用它。Cron is not a shell script,你不能在一个代码中做所有你能做的事情,比如取消引用变量或者设置任意的新变量。
我建议您将值替换到cron行中,并避免使用变量
/usr/bin/php5.6 /home/michael/bash/checkalive.php >/dev/null 2>&1 &
另外,考虑删除尾随的&
,因为它不是必需的。
https://stackoverflow.com/questions/55259660
复制相似问题