Задания по расписанию в 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