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 &
此外,请考虑删除结尾的 &
,因为这不是必需的。
我有一个这样的 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 &
此外,请考虑删除结尾的 &
,因为这不是必需的。