Bash Script может запускать php-скрипт вручную, но не может работать в Cron - PullRequest
0 голосов
/ 20 марта 2019

У меня есть скрипт 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 голосов
/ 20 марта 2019

Вы столкнулись с одной из самых распространенных ошибок cron, пытаясь использовать ее как произвольный скрипт оболочки. Cron не является сценарием оболочки , и вы не можете делать все, что можете, в одном, например разыменование переменных или задание произвольных новых переменных.

Я предлагаю вам заменить ваши значения в строке cron и избегать использования переменных

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

Кроме того, рассмотрите возможность удаления завершающего &, так как в этом нет необходимости.

...