2016-01-28 2 views
0

У меня есть PHP скрипт, который вызывается каждую минуту с помощью кронтаб, как это:PHP `Exec()` не работает при запуске от Cron

* * * * * /usr/bin/php /var/www/html/cronjobs/watchdog/watchdogExec.php 

Скрипт выполняет ряд других сценариев PHP и проходит переменная так:

$ccmd = "nohup sudo /usr/bin/php watchdog.php " . $var . " &"; 
exec($ccmd); 

При вызове из браузера, watchdogExec.php прекрасно работает и делает свою работу. Однако, когда я добавил cronjob, скрипт не работает и спам письма со следующей ошибкой:

No entry for terminal type "unknown"; 
using dumb terminal settings. 

Эта ошибка появляется такое же число раз exec() называется, поэтому я решил, что должен быть вопрос. Я искал и читал о том, что cronjob не запускает команды в терминале, и я попытался настроить среду в crontask, но это не помогло. По-видимому, PHP печатает эту ошибку, но я ничего не нашел в их документации об этом.

* * * * * /usr/bin/env TERM=xterm /usr/bin/php /var/www/html/cronjobs/watchdog/watchdogExec.php 

Я бегу CentOS 7.

Edit:

Искал некоторые и узнали о переменных окружения PHP. Кто-то исправил аналогичную проблему, добавив следующее в свой PHP-скрипт. Однако это не исправление моей проблемы, оно только останавливает спам почты. Сценарий все еще не работает.

putenv('SHELL=/bin/bash'); 
putenv('TERM=xterm'); 
+0

Добавить отладочный вывод в скрипт, ** это не работает ** является расплывчатым ... – maxhb

+0

Что '$ var' равный в коде? (найдите строку, начинающуюся с '$ var =') – Mike

+0

@Mike это не связано, это целое число из базы данных. Скрипт запускается при вызове из браузера, это отсутствие терминала в cron, вызывающего это. – aron9forever

ответ

1

Вы пробовали использовать полные пути в инструкции exec? Также попробуйте добавить переменную окружения TERM:

$ccmd = "nohup /usr/bin/sudo /usr/bin/env TERM=xterm /usr/bin/php watchdog.php " . $var . " &"; 
+0

Святое дерьмо это сработало. также изменил 'nohup' на'/usr/bin/nohup'. Спасибо. – aron9forever

0

Я делаю это с помощью оболочки оболочки оболочки. Я добавляю файл phpcron.sh с

#!/bin/bash 
php -f filename.php 

и добавить это в crontab.

* * * * * /var/www/phpcron.sh 
+0

Пробовал это так, теперь он отправляет простой «: нет такого файла или каталога». Мой скрипт: '#!/Bin/bash /usr/bin/php/var/www/html/cronjobs/watchdog/watchdogExec.php' – aron9forever

+0

Мне удалось заставить его работать, добавив' bash' до пути к скрипт. Однако ошибка «Нет записи ...» по-прежнему сохраняется. – aron9forever

Смежные вопросы