Подтвердить что ты не робот

Отладка заданий crontab

Я добавил запись crontab на сервере Linux, на котором будет запущен исполняемый файл Java. Java-код использует свой собственный класс для регистрации ошибок и сообщений в файле журнала.

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

Таким образом, возможны две причины:

  • Выполненный код, но не журнал,
  • Или код вообще не выполнялся.

В указанном файле журнала есть разрешения chmod 777, поэтому я предполагаю, что это вторая причина.

Почему бы не выполнить задание crontab в запланированное время? И как мне отлаживать это без какого-либо ведения журнала?

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

4b9b3361

Ответ 1

Добавить 2 > & 1 в конец вашей команды Crontab. Это перенаправит вывод stderr в стандартный вывод. Затем убедитесь, что вы регистрируете команду crontab Unix.

0 0,12 1 */2 * /sbin/ping -c 192.168.0.1; ls -la >>/var/log/cronrun 2>&1

Это приведет к захвату чего-либо из команды Unix.

Несколько дополнительных советов (помогая коллеге на днях...). Выпишите переменные среды, выпустив набор команд без параметров. И получите оболочку для эха каждой команды с помощью команды set -x. В верхней части вашей проблемы script;

set
set -x

Ответ 2

Вы можете включить ведение журнала для заданий cron, чтобы отслеживать проблемы. Вам нужно отредактировать файл /etc/rsyslog.conf or /etc/rsyslog.d/50-default.conf (в Ubuntu) и убедиться, что у вас есть следующая строка без комментария или добавить ее, если она отсутствует:

cron.*                         /var/log/cron.log

Затем перезапустите rsyslog и cron:

sudo service rsyslog restart
sudo service cron restart

Задачи Cron записываются в /var/log/cron.log.

Ответ 3

Проверьте, действительно ли вы отформатировали время, когда оно должно работать хорошо.

Например, вместо

*/1 * * * * echo 'debug' > /home/glab/change_branch.log

может быть следующим:

1 * * * * echo 'debug' > /home/glab/change_branch.log

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

Ответ 4

Одна вещь, которая может вызвать вашу проблему, заключается в том, что cron (по крайней мере, в дистрибутиве, который я использую, Amazon Linux OS) считают, что время должно быть в формате UTC, поэтому, если вы находитесь в другом часовом поясе (например, -03: 00), вы можете ожидать, что он запустит за 3 часа до этого, что на самом деле это произойдет, и на самом деле у вас нет проблем.

Ответ 5

Предполагая, что запуск команды вручную работает, но не в Cron, может быть, что правильный путь не отображается в команде cron. Вы можете исправить это, запустив crontab -e, а затем введя путь непосредственно на вкладку cron:

# Export the path so that the scripts run correctly PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin