Команды Bash не выполняются при выполнении задания cron - PHP - PullRequest
0 голосов
/ 01 мая 2010

У меня есть задание cron, которое запускает скрипт PHP каждые пять минут; PHP-скрипт выполняет две команды bash в конце скрипта. Я знаю, что скрипт выполняется из-за файла журнала, к которому он добавляется. Когда я запускаю PHP-скрипт вручную через Ubuntu Gnome Terminal, обе команды bash выполняются безупречно; однако, когда скрипт PHP запускается через cron, две команды bash не запускаются. Есть идеи?

$command = 'notify-send "' . count($infoleakPosts) . '  New Posts."';
`$command`;

$command = 'firefox http://example.com';
`$command`;

*/1 * * * * php /home/andrew/grab.php USERNAME PASSWORD # JOB_ID_1

Ответы [ 3 ]

2 голосов
/ 01 мая 2010

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

Попробуйте установить в командной строке полный путь к команде, т.е. /path/to/notify-send "x New Posts".

Вы можете использовать which notify-send со своего обычного терминала, чтобы получить путь для вставки в ваш скрипт.

Вы также можете получить выходные данные из своей команды, чтобы помочь при отладке. Использование оператора backtick вернет вывод, так что вы можете присвоить его переменной и / или вывести ее.

$output = `$command`;
error_log($output);
1 голос
/ 01 мая 2010

когда вы запускаете скрипт под cron, у вас нет вывода tty или X-windows DISPLAY env-var. Я подозреваю, что команды выполняются, но не работают.

0 голосов
/ 01 мая 2010

комментарий к ответу выше о cron: cron будет запускать команды от имени пользователя, чей это crontab. Так что, если вы настроите crontab, он будет запускать команды от вашего имени. Он запускает несколько иной набор сценариев запуска оболочки, чем те, которые вы получаете при входе в систему - он знает, что у него нет tty, и поэтому выполняет только файл ~ / .bashrc, а не набор файлов профиля. Проверьте man-страницы для cron и bash для деталей

...