1

Я пытаюсь вызывать сценарий оболочки каждые 5 минут, ведьма выполняет PHP-файл под root.

# crontab -l
*/5 * * * * /home/regularuser/call.sh

разрешения:

-rw-rw-rw-  1 root   root        162 Jun  6 23:40 call.php
-rwxr-xr-x  1 root   root         66 Jun  7 01:20 call.sh

содержание call.sh:

#!/bin/bash
php -q /home/regularuser/call.php
echo "request processed"

Моя проблема в том, что мой php-файл не выполняется через crontab. Однако если я позвоню call.sh - все работает отлично.

Я новичок в crontab и сценариях оболочки, поэтому любые советы / ресурсы приветствуются.

3 ответа3

1

Помните, что Cron будет работать в очень минимальной среде. Некоторые важные вещи, такие как PATH, могут отличаться от ожидаемых.

Попробуйте записать вывод команды в системный журнал, например так:

*/5 * * * * /home/regularuser/call.sh 2>&1 | logger -t call.sh

Это выведет все stdout и stderr в системные журналы, обычно в /var /log /messages. Отсюда, используйте 'grep call.sh /var /log /messages', чтобы увидеть вашу ошибку, которая, вероятно, будет 1-2 строчки.

Я часто предпочитаю регистрировать подобные ошибки, а не рассылать спам по электронной почте. Но это полезно только для коротких сообщений.

Как только вы найдете сообщение об ошибке, обновите свой вопрос с ошибкой. Или вы могли бы понять это для себя;)

0

Вы уверены, что php находится в $ PATH, известном crontab? Что, если вы используете полный путь (/what/ever/bin/php?)

Также cron должен отправлять вывод вашей команды на ваш почтовый ящик. О чем это говорит?

0

Может быть, помогите добавить путь к команде crontab. если эта команда найдет php бинарный путь как этот:

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

используйте эту команду с путем - в моем случае /usr /bin /php:

*/5 * * * * /usr/bin/php -q /home/regularuser/call.php

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .