Задания по расписанию в Linux cron
| Введение | |
| Инструкция | |
| Каждую минуту | |
| Каждый час | |
| Каждый день | |
| Несколько раз в день | |
| После перезагрузки | |
| Запуск из других директорий | |
| Python скрипт по расписанию | |
| Отключить отправку email | |
| Похожие статьи |
Введение
wiki
cron — классический демон (компьютерная программа в системах класса UNIX),
использующийся для периодического выполнения заданий в определённое время.
Регулярные действия описываются инструкциями, помещенными в файлы crontab и
в специальные каталоги.
Название cron образовано от греческого слова χρόνος (хрόнос) — время
(по-английски — chronos).
В системах на базе systemd cron фактически замещён встроенным механизмом systemd.timer.
Инструкция
Файлы crontab, создаваемые для отдельных пользователей, находятся в каталоге
/usr/spool/cron/crontabs/
или
/var/spool/cron/tabs/.
Редактировать их вручную не рекомендуется, для этого используют команду
crontab -e
.
Файлы
crontab
, используемые для управления всей системой, располагаются в каталоге
/etc/cron.d/.
Кроме того, в каталогах
/etc/cron.daily/, /etc/cron.weekly/ и /etc/cron.monthly/
размещаются автоматически запускаемые программы (ежедневно, еженедельно или ежемесячно).
Запускать скрипт каждую минуту
crontab -e
*/1 * * * * /home/andrei/script.sh
Или просто
* * * * * /home/andrei/script.sh
Запускать скрипт каждый час
crontab -e
0 * * * * /home/andrei/script.sh
Этот скрипт будет выполняться каждую нулевую минуту.
Запускать скрипт каждый день
crontab -e
0 1 * * * /home/andrei/script.sh
Этот скрипт будет выполняться каждую день в час ночи.
Запускать скрипт несколько раз в день
Скрипт будет запускаться в 7:00, 10:00 и 16:00
crontab -e
0 7 * * * /home/andrei/cronscript.sh > /dev/null 2>&1
0 10 * * * /home/andrei/cronscript.sh > /dev/null 2>&1
0 16 * * * /home/andrei/cronscript.sh > /dev/null 2>&1
Этот скрипт будет выполняться каждую день в час ночи. > /dev/null 2>&1 отключает отправку писем с уведомлениями .
После перезагрузки
В примере сервис sshd будет перезапускаться после каждого ребута.
cd
touch restart_sshd.sh
echo "systemctl restart sshd" > restart_sshd.sh
crontab -e
@reboot /home/andrei/restart_sshd.sh
no crontab for andrei - using an empty one
crontab: installing new crontab
Запуск из других директорий
По умолчанию cron запускает скрипты из домашней директории
Я сталкивался с тем, что cron не видит скрипты в домашней директории если не указать в
crontab полный путь.
То есть такое задание не выполнится
* * * * * script.sh
А это сработает:
* * * * * /home/andrei/script.sh
Чтобы запустить скрипт из другой директории - в неё нужно сперва перейти
* * * * * cd monitoring/new_scripts && $(which bash) script.sh
cron перейдёт в нужную директорию а потом увидев && поймёт что
нужно сделать И выполнение скрипта.
Логическое или можно задать с помощью ||
Python скрипт по расписанию
Чтобы запустить .py скрипт из произвольной директории - перейдите в
неё и выполните $(which python3) название файла
Например:
crontab -e
* * * * * cd python_scripts && $(which python3) script.py
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги
Отключить отправку email
Чтобы запустить отключить оповещения по email, которые посылает вам cron такие как
You have new mail in /var/spool/mail/andrei
Нужно перенаправить вывод в /dev/null
Например:
crontab -e
* * * * * /home/andrei/script.sh > /dev/null 2>&1
Автор статьи: Андрей Олегович
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги