Команды Bash не выполняются при выполнении задания cron - PHP

У меня есть задание 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 ответа

Решение

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

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

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

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

$output = `$command`;
error_log($output);

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

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

Другие вопросы по тегам