
Планировщик заданий Cron
06.05.2019 18:11 | Інше
Навіть на якихось малих проектах Вам швидше за все періодично доведеться виконувати якісь завдання. Наприклад, раз на добу видаляти користувачів які не підтвердили адресу електронної пошти, раз на тиждень робити розсилку новин і т.д. Тому необхідно знати що таке cron в unix-системах і як з ним працювати.
Загальний опис
Cron - це планувальник, який дозволяє користувачам автоматично виконувати завдання за розкладом. Кожне завдання описуються в файлі crontab в одному рядку, в якому вказується, коли воно повинно спрацювати і яка команда повинна бути виконана. Рядок завдання являє собою 6 полів - перших 5 відповідають за час, а останнє - скрипт:
* * * * * /path/to/task.sh
або схематично:
[хвилини] [години] [день місяця] [місяць] [день тижня] [абсолютний шлях до файлу]
Символ *
позначає всі можливі значення, тобто в прикладі вище скрипт task.sh
буде виконуватися кожну хвилину кожної години кожного дня місяця і т.д. Можна вказувати як окреме значення, так і діапазон, наприклад 0-10
або 15-20
. Допустимі і кілька діапазонів, перерахованих через кому: jan-mar,nov-dec
.
Корисні команди
Подивитися список завдань поточного користувача:
crontab -l
Вивести список завдань конкретного користувача:
crontab -u <username> -l
Резервне копіювання завдань в текстовий файл:
crontab -l > backup.txt
Відновлення завдань з файлу бекапа:
crontab backup.txt
Видалення поточних завдань:
crontab -r
Як додати або відредагувати crontab-файл
Виконайте команду:
crontab -e
При цьому відкриється crotnab-файл в редакторі за замовчуванням (зазвичай це vi / vim, але наприклад я змінив його на nano). Додайте в файл завдання або відредагуйте їх. При цьому слід переконатися, що файли скриптів мають права на читання і виконання.
Приклади
Виконувати завдання кожну хвилину:
* * * * * /task.sh
Виконувати завдання кожен день о 8-ій ранку:
0 8 * * * /task.sh
Виконувати завдання кожен день о 8-ій ранку та о 8-ій вечора:
0 8,20 * * * /task.sh
Виконувати завдання кожні півгодини:
*/30 * * * * /task.sh
Виконувати завдання кожні 2 години:
0 */2 * * * /task.sh
Виконувати завдання о 7-ій ранку по понеділках:
0 7 * * mon /task.sh
Виконувати завдання кожну годину (ідентично 0 * * * *
):
@hourly /task.sh
Також можливі наступні варіанти:
- щодня:
@daily
(те ж саме що і0 0 * * *
) - щотижня:
@weekly
(те ж саме що і0 0 * * mon
) - щомісяця:
@monthly
(те ж саме що і0 0 1 * *
) - щороку:
@yearly
(те ж саме що і0 0 1 1 *
)
Є також корисна команда, яка буде виконуватися при (пере)завантаженні системи, і може знадобитися для автоматичного запуску будь-яких завдань у фоновому режимі:
@reboot /task.sh
Успіхів!