Выполнение заданий через CRON в Linux

Admin Bash, CentOS, Linux, VPS

CRON – это планировщик заданий в Linux, который запускает выполнение скриптов по заданному расписанию.

Пример CRON задания

# Example:
# .---------- minute (0-59)
# | .-------- hour (0-23)
# | | .------ day of month (1-31)
# | | | .---- month (1-12) OR jan, feb...
# | | | | .-- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

Добавление задания в CRON

В операционной системе Cent OS (Linux) файл, отвечающий за выполнение заданий, лежит по такому пути: /etc/crontab.

Для его редактирования, заходим на сервер по протоколу ssh.

Для редактирования общего крона на сервере вводим консольную команду:

nano /etc/crontab

Для альтернативного внесения в cron — для каждого отдельного пользователя — смотрите ниже.

Исполняемые файлы имеют расширение sh. В начале файла принято записывать:

#!/bin/sh

Как просмотреть логи в CRON

Если добавленное в CRON задание не выполняется, можно проверить ошибки в логах.

Возьмем скрипт из примера резервного копирования данных на Яндекс Диск.

Скрипт лежит в папке my_scripts и называется backup_webdav_day.sh. Для просмотра логов CRON

По умолчанию он имеет такой вид:

00 2 * * * root /my_scripts/backup_webdav_day.sh >/dev/null 2>&1

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

Предположим, что выполнение команды не работает, нам нужно понять, почему так происходит. Изменяем в файле backup_webdav_day.sh данные скрипта, чтобы тот записывал ход выполнения работы в специальный лог файл, который будет создан в той же директории. И меняем время на ближайшее, допустим сейчас 16.00 и мы хотим узнать, будет ли работать скрипт. Тогда делаем его выполнение через 5 минут.

05 16 * * * root /my_scripts/backup_webdav_day.sh > /my_scripts/backup_webdav_day.log 2>&1

Ждём пока не наступит 16.05, а затем смотрим что показывает файл backup_webdav_day.log.

cat /my_scripts/backup_webdav_day.log

CRON отказано в доступе / Permission denied

Если скрипт не будет выполняться, то в логах файла вы увидите соответствующую ошибку. Например, в ошибке может находиться такая информация:

/bin/bash: /my_scripts/backup_webdav_day.sh: Отказано в доступе

или

/bin/bash: /my_scripts/backup_webdav_day.sh: Permission denied

Это означает, что в операционной системе Linux, нет прав доступа к файлу. В этом случае файлу backup_webdav_day.sh присваиваем права доступа на исполнение – chmod +x:

chmod +x backup_webdav_day.sh

После этого данная ошибка должна исчезнуть.

Альтернативное изменение cron в Ubuntu

Иногда изменение файла /etc/crontab напрямую не даёт результата.

Также этот способ добавления заданий в cron считается более надёжным. Задания добавляются конкретному пользователю.

Посмотреть, есть ли у пользователя задания в cron

crontab -l

Для внесения изменения в cron используем команду:

crontab -e

Добавляем в конце файла нужные условия, например:

*/4 * * * * mister sh /home/mister/file

Сохраняем файл и перезагружаем cron

sudo service cron reload

Или так

/etc/init.d/cron reload

У сайта нет цели самоокупаться, поэтому на сайте нет рекламы. Но если вам пригодилась информация, можете лайкнуть страницу, оставить комментарий или отправить мне подарок на чашечку кофе.

Комментарии к статье “Выполнение заданий через CRON в Linux” (2)

  • Дмитрий
    07.11.2021 в 10:08

    Добавляем в конце файла нужные условия, например:

    */4 * * * * mister sh /home/mister/file

    какие условия вы добавили в конце файла? что за mister sh? можно писать попонятнее?

    • Admin
      Автор записи
      11.11.2021 в 08:22

      Это логин пользователя от которого будет исполняться. Обычно это root, здесь же в статье есть выше.

Добавить комментарий для Дмитрий Отменить ответ

Напишите свой комментарий, если вам есть что добавить/поправить/спросить по теме текущей статьи:
"Выполнение заданий через CRON в Linux"