Плануємо завдання у cron

Cron – програма unix-подібних операційних систем, яка дозволяє виконувати команди або скрипти за розкладом. Аналогом є Window’ий “Планувальник завдань”. Cron працює у фоновому режимі і постійно (а якщо вже точно, то кожну хвилину) перевіряє свої файли конфігурації щодо виконання будь-яких дій, описаних у них.

Для керування завданнями cron використовується команда crontab та файл /etc/crontab. Про їхню відмінність поговоримо далі. Для початку розберемося з директоріями та файлами налаштування cron. Файли crontab, які використовуються для керування всією системою, знаходяться в каталозі /etc/cron.d/. Також у каталогах /etc/cron.daily/, /etc/cron.weekly/ і /etc/cron.monthly/ знаходяться програми, які автоматично запускаються щодня, щотижня та щомісячно відповідно. Файли, які створює crontab, в залежності від системи,  лежать  тут /usr/spool/cron/crontabs/ або тут /var/spool/cron/tabs/. Вручну їх редагувати не потрібно, тому що для цього є команда crontab -e. Ну і файл /etc/crontab, який зазвичай використовується системними службами або завданнями, яким потрібні root-права. Редагувати самому цей файл можна, але не рекомендується.

Синтаксис файлу crontab виглядає так:

* * * * * команда, яка буде виконуватись
- - - - -
| | | | |
| | | | ----- День тижня (0 - 7) (Неділя =0 або =7)
| | | ------- Місяць (1 - 12)
| | --------- День (1 - 31)
| ----------- Години (0 - 23)
------------- Хвилини (0 - 59)

[tds_note]Кількість пробілів між зірочками не має значення[/tds_note]

Для редагування, як я вже писав вище, використовується команда crontab -e. Ця команда створить файл з ім'ям користувача в каталозі /usr/spool/cron/crontabs/ або /var/spool/cron/tabs/ в залежності від системи з правами 600, або відкриє його на редагування, якщо він вже існує. Також за допомогою команди crontab -l ми можемо переглянути раніше відредагований файл, а за допомогою crontab -r видалити файл crontab для поточного користувача. Розглянемо приклади: Такий запис свідчить, що файл test.txt кожну хвилину буде додаватися запис "Ho-Ho-Ho"

* * * * * echo "Ho-Ho-Ho" >>  /home/user1/test.txt

Те саме, щодня о 9.30 ранку
30 9 * * * echo "Ho-Ho-Ho" >>  /home/user1/test.txt

[tds_info]Ми можемо вказувати періодичність (*/), діапазони (-) або списки значень (,) за допомогою роздільників[/tds_info]

Виконувати кожні 15 хвилин
*/15 * * * * echo "Ho-Ho-Ho" >>  /home/user1/test.txt

Виконувати по буднях о 20.47
47 20 * * 1-5 echo "Ho-Ho-Ho" >>  /home/user1/test.txt

Виконувати 12.10, 14.10 та 16.10 кожні 3 місяці 5 числа
10 */12,14,16 5 */3 * echo "Ho-Ho-Ho" >>  /home/user1/test.txt

Виконувати тільки по парних днях кожного Січня, Березня та Квітня опівночі
0 0 2-31/2 1,3,4, * echo "Ho-Ho-Ho" >>  /home/user1/test.txt

Думаю цих прикладів буде більш-менш достатньо, щоби зрозуміти загальний принцип роботи cron. Для перевірки правильності складання виразу crontab на просторах інтернету існує багато різних сайтів-валідаторів, які допоможуть нам перевірити все, що ми написали. Одним із таких, яким я користуюся, є https://crontab.guru/. Можу сміливо і вам рекомендувати його.