29 October 2024
Дуже часто доводиться періодично виконувати ті самі дії: моніторинг доступності сайту, оновлення цін (якщо у вас Інтернет-магазин), переіндексація, застосування цінових правил, резервне копіювання бази даних, ротація журналів тощо. Для автоматизації подібних завдань у Linux використовується планувальник завдань cron.
Таблиця розкладу демона cron, тобто вказівки, коли та яку команду потрібно виконати, зберігається у файлі /etc/crontab.
Розглянемо приклад цього файлу:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root nice -n 19 run-parts --report /etc/cron.hourly 02 4 * * * root nice -n 19 run-parts --report /etc/cron.daily 22 4 * * 0 root nice -n 19 run-parts --report /etc/cron.weekly 42 4 1 * * root nice -n 19 run-parts --report /etc/cron.monthly
Параметр SHELL задає ім'я програми-оболонки, параметр PATH - шлях пошуку програм, MAILTO - ім'я користувача, якому буде надіслано звіт про виконання розкладу, а HOME - домашній каталог crond. Але найголовніше — не ці параметри, а сама таблиця розкладів, що займає в нашому випадку останні чотири рядки лістингу. Відповідно до цієї таблиці щогодини виконуватимуться програми з каталогу /etc/cron.hourly, щодня — з каталогу /etc/cron.daily, щотижня — з каталогу /etc/cron.weekly, а раз на місяць — з каталогу /etc /cron.monthly.
Припустимо, вам потрібно щодня виконувати команду update_av ftp://server.com/bases/. У каталозі /etc/cron.daily створіть файл update_av такого змісту:
#!/bin/bash update_av ftp://server.com/bases/Цей файл являє собою невеликий bash-сценарій (сценарій командного інтерпретатора). Тепер зробимо його здійсненним:
# chmod +x update_av
Справді, зручно? Але іноді нам буває потрібно створити більш гнучке розклад. Наприклад, ми хочемо, щоб одна програма виконувалася о 7:00, а інша о 7:20. Тут простим додаванням сценарію в каталог /etc/cron.daily вже не відбудешся. Щоб створити такий розклад, вам доведеться вивчити формат записів таблиці розкладів:
хвилини (0?59) години (0?23) день (1?31) місяць (1?12) день_тижня (0?6, 0 — Нд) команда
Щоб реалізувати наш розклад, слід додати до файлу /etc/crontab наступні рядки:
0 7 * * * /usr/bin/command1 arguments 20 7 * * * /usr/bin/command2 arguments
Перша команда запускатиметься щодня о 7 годині ранку, а друга — теж щодня, але о 7:20.
Знавши формат crontab, ми можемо відредагувати стандартну таблицю розкладів. Зверніть увагу - команди, що виконуються щодня, запускатимуться о 4 годині ранку. Це звичайно зручно, але вони не будуть виконані, якщо ви вимикаєте віртуальний сервер на ніч для економії коштів. Тому давайте встановимо інший час, наприклад 9:02 ранку:
02 9 * * * root nice -n 19 run-parts --report /etc/cron.daily
Аналогічна ситуація з щотижневим запуском. Програми будуть запущені не лише о 4:22 ранку, а ще й у неділю. Якщо сервер вимикається на вихідні (якщо це не веб-сервер, тобто він не повинен працювати 24/7, є сенс вимикати його на вихідні). Тому доцільно призначити запуск на понеділок о 8 годині 22 хвилині:
22 8 * * 1 root nice -n 19 run-parts --report /etc/cron.weekly
Крім основного конфігураційного файлу користувачі Linux можуть створювати власні розклади. Редагування власного розкладу здійснюється командою crontab –e. Якщо ім'я користувача не вказано, буде відредаговано розклад поточного користувача:
crontab -e
Користувач root може редагувати розклад будь-якого користувача в системі. Для цього йому потрібно вказати ім'я користувача за допомогою параметра –u:
crontab –e –u hosting