Cron, похоже, запускается, но не выполняется так же, как при запуске вручную с терминала [дубликат]

На этот вопрос уже есть ответ здесь:

У меня есть скрипт php, который подключается к внешнему API, возвращает некоторые данные и обновляет таблицу базы данных. Я могу запустить его напрямую через командную строку / терминал SSH, и он отлично работает (занимает около 5 минут для завершения).

Используя crontab, я 'cron'ом' этот скрипт, поэтому он запускается каждые три часа, используя следующую команду:

0 */3 * * * /usr/bin/php /var/acme/cron/api_update_db.php

Используя системный журнал, я вижу, что этот cron запущен, но похоже, что cron фактически запускается каждые три часа. часов, как и ожидалось, но база данных не обновлялась? Но когда я сам вручную запускаю тот же самый скрипт, перейдя в этот каталог и введя следующее, он запускает (и обновляет БД)

php api_update_db.php

. Будет ли причина для этого выполнения по-другому при запуске из задания cron, а затем при запуске вручную из терминал (который, похоже, работает).

3
задан 3 February 2016 в 18:35
3 ответа

Возможно, вы получите какой-то вывод stderr\stdout, который может помочь идентифицировать проблему. Обычно это заканчивается тем, что отправляется самому себе, но если не попробовать добавить конкретное перенаправление всего вывода в конец записи crontab в файл, например:

0 */3 * * * /usr/bin/php /var/acme/cron/api_update_db.php &> /tmp/cron.output
4
ответ дан 3 December 2019 в 05:03
crontab -u <username> -e 

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

3
ответ дан 3 December 2019 в 05:03

В зависимости от используемой вами версии/типа cron, выходные данные команды обычно отправляются кому-нибудь по электронной почте. В традиционном стиле вы можете поставить

MAILTO=your.login

или, может быть, даже

MAILTO=your_email@example.com

и получить вывод из скрипта.

В худшем случае попробуйте

0 */3 * * * /usr/bin/php /var/acme/cron/api_update_db.php > /tmp/cron.output 2> /tmp/cron.error

Использование &> вероятно также не сработает - cron выполняет с использованием /bin/sh, что скорее всего не bash и &> не входит в стандарт POSIX, это расширение bash (возможно, принятое и другими оболочками, но не всеми).

Другая вещь, которую нужно искать, это то, что она выполняется без каких-либо переменных окружения и т.д. Поэтому, если у вас есть учетные данные для БД, установленной в качестве переменной окружения в файле .bashrc, то это не сработает.

.
1
ответ дан 3 December 2019 в 05:03

Теги

Похожие вопросы