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

Похожие статьи
Linux
FAQ
Debian
Ubuntu
CentOS
Rocky
Bash
Настройка сети
Файлы, директории, ссылки…
Изучить свободное место на диске
Объединить .pdf файлы
diff: сравнение файлов
find: поиск файлов
wget: скачивание файлов
kill: завершить процесс
curl
make
signal: системные сигналы
env: переменные окружения
localectl: язык
systemctl: Список активных сервисов
Firewall
SCP: обмен файлами;
SSH: удалённый доступ
cron: задания по расписанию
sudo
Мониторинг ресурсов
C
C++