Я выполняю скрипт оболочки как задание cron каждую минуту так:
* * * * * /bin/bash /var/www/html/stream.sh
Скрипт содержит следующий код:
#!/bin/sh
if ps -ef | grep -v grep | grep get_tweets.php ; then
exit 0
else
nohup php /var/www/html/streaming/db/get_tweets.php > /dev/null &
exit 0
fi
Я также запускаю другой сценарий оболочки в качестве cron, единственное различие между ними заключается в том, что «get_tweets» заменяется на «parse_tweets_keyword», а cron выполняется так:
* * * * * /bin/bash /var/www/html/process-check.sh
Проблема в том, что хотя последний cron работает отлично, первый, похоже, не запускает скрипт успешно, однако, когда я запускаю команду:
nohup php /var/www/html/streaming/db/get_tweets.php > /dev/null &
Сценарий работает отлично, поэтому я не совсем уверен, в чем проблема. Разрешения для всех файлов правильные и исполняемые, и я запускаю cron-файлы как root под crontab, и оба сценария PHP, которые я пытаюсь выполнить, выполняются как фоновые процессы.
Если кто-то может помочь или знает проблему, будет принята с благодарностью. Я также открыт для более эффективных способов запуска сценария PHP, возможно, в виде одной строки в crontab, а не для запуска сценария оболочки для запуска сценария PHP через cron.
Так что, похоже, это был ответ на мой вопрос:
#!/bin/sh
cd /var/www/html/streaming/db
if ps ax | grep -v grep | grep get_tweets.php ;
then
exit 0
else
nohup php ./get_tweets.php > /dev/null &
exit 0
fi
Может показаться, что он работает даже в том случае, если root get_tweets.php не будет выполнен без предварительного изменения каталога до фактического запуска команды. По второй строке:
cd /var/www/html/streaming/db
Хотя я не совсем уверен, почему он не запустится, так как parse_tweets_keyword.php отлично работал, используя первый скрипт bash, опубликованный в моем вопросе.
Других решений пока нет …