Використання cron і команди crontab - форум програмістів

Використання cron і команди crontab - форум програмістів

Назви каталогів і файлів описані для Linux (RedHat). Для інших операційних систем, назви можуть відрізнятися, але принцип роботи cron точно такий же.

Cron це програма, яка виконує завдання за розкладом. Дозволяє неодноразовий запуск завдань. Тобто завдання можна запустити в певний час або через певний проміжок часу. Формат і значення полів, для призначених для користувача файлів crontab, будуть приведені в кінці статті.

При завантаженні системи, запускається демон cron і перевіряє чергу завдань at і завдань користувачів в файлах crontab. При запуску, демон cron спочатку перевіряє каталог / var / spool / cron на наявність файлів crontab, файли crontab мають імена користувачів, відповідні іменам користувачів з / etc / passwd Кожен користувач може мати тільки один файл crontab, записів в файлі може бути декілька.

Іншими словами - файли crontab містять інструкції для демона cron, який запустить завдання (я) описане в файлі crontab. Всі файли crontab з каталогу / var / spool / cron завантажуються в пам'ять, одночасно з ними завантажуються файли з /etc/cron.d Після цього демон cron завантажує вміст файлу / etc / crontab При стандартних налаштуваннях, вміст / etc / crontab має такий вигляд :

SHELL = / bin / bash
PATH = / sbin: / bin: / usr / sbin: / usr / bin
MAILTO = root
HOME = /
# Run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Інформація файлу вказує, що:
* Вміст каталогу /etc/cron.hourly буде запускатися кожну годину на першій хвилині години.
* Вміст каталогу /etc/cron.daily буде запускатися кожен день на другій хвилині четвертої години.
* Вміст каталогу /etc/cron.weekly буде запускатися щонеділі на 22'ой хвилині 4'го години.
* Вміст каталогу /etc/cron.monthly буде запускатися кожен перший день місяця на 42'ой хвилині 4'го години.

SHELL = / bin / bash означає використовувати для запуску команд / bin / bash. якщо змінна не вказана, то значення буде взято з / etc / passwd для користувача є власником файлу.

HOME = / кореневої каталог для користувача (параметр не обов'язковий) При необхідності доступу до спеціальних властивостями інтерпретатора, значення змінних SHELL і HOME можна змінити, не залежно від того, що прописано в / etc / passwd

MAILTO = root означає кому відсилати повідомлення про результат роботи команд.

Весь вміст з цих каталогів буде запускатися з правами доступу користувача root і файли повинні мати права доступу на "виконання" (про права доступу читай статтю viewtopic.php? T = 331) Тому перед розміщенням файлів в одному з цих каталогів необхідно переконатися, що сценарії не завдадуть шкоди системі.

Після того, як демон cron запущений і прочитав вміст всіх файлів crontab, він не діє, прокидаючись кожну хвилину і перевіряючи чи не потрібна запуск будь-якої команди в дану хвилину, або не з'явився новий файл crontab який необхідно обробити. Демон cron визначає зміни за часом модифікації файлів або каталогів, таке його властивість позбавляє від необхідності перезапуску демона.

Як зазначалося вище, розміщення файлів для cron в каталогах
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

доступно тільки користувачеві root, для використання файлів crontab користувачами, потрібно використовувати команду crontab. Команда служить для створення, зміни та додати файл для демона cron

Розглянемо приклад створення файлу crontab для користувача user, домашня директорія / home / user

Завдання: запускати кожну хвилину файл / home / user / mail, який буде відправляти пошту

# Вміст файлу mail (файл повинен бути з правами на запуск! Наприклад -rwxr-xr-x)
#! / Bin / bash
mess = "test cron"
echo "$ mess" | mutt -s "subj" -m application / octet-stream [email protected]

1.Создать тимчасовий файл / home / user / test вміст файлу test таке:


2. Запускаємо в терміналі команду crontab / home / user / test

Усе. Після цього в каталозі / var / spool / cron буде створений файл "user" приблизно з таким вмістом

і файл / home / user / mail буде запускатися демоном cron кожну хвилину.

Доступ в каталог / var / spool / cron звичайним користувачем закритий, що б подивитися юзером "user" чи є у нього файл crontab, досить набрати команду crontab -l, якщо файл існує - буде показано його вміст.

Для видалення файлу використовується команда crontab -r

Для редагування crontab -e

Для управління файлами crontab користувачем "root" використовується синтаксис:

-------------------------
crontab -u user_name file -створення файлу crontab з файлу "file" для користувача "user_name"
-------------------------
-u означає чий crontab буде оброблений, Якщо опція не задана, то буде оброблений crontab того користувача, який запустив команду crontab.

Формат і значення полів

Кожна команда в призначеному для користувача файлі crontab займає один рядок і складається з шести полів. Призначені для користувача файли crontab знаходяться в каталозі / var / spool / cron

Допустимі значення:
хвилина від 0 до 59
годину від 0 до 23
день_месяца від 1 до 31
місяць від 1 до 12 (можна три букви з назви місяця, регістр не має значення від jan до dec)
день_неделі від 0 до 6 (0 цієї неділі, можна писати від sun до sat)

Кожне з полів дати і часу може бути позначено символом *, буде відповідати будь-якому можливому значенню. Для цих полів можна вказувати діапазони значень, розділених дефісом, наприклад:

* * / 2 * * sat echo "HELLO" -друк HELLO кожен парний годину, кожну суботу

рівнозначна попереднього прикладу запис (списком)

* 0,2,4,6,8,10,12,14,16,18,20,22 * * sat echo "HELLO" -друк HELLO кожен парний годину, кожну суботу

те ж саме із зазначенням діапазону

* 0-23 / 2 * * sat echo "HELLO" -друк HELLO кожен парний годину, кожну суботу

Для налагодження завдання cron, можна перенаправити результат в файл

0-59 * * * * / home / user / mail 2> /tmp/tmp.cron

Якщо при запуску команди / home / user / mail виникнуть помилки, то вони будуть записані в файл /tmp/tmp.cron і ви завжди зможете дізнатися причину. У разі перенаправлення виведення в файл, лист, користувачеві зазначеною в змінної MAILTO відправлений не буде.

Подивитися інформацію про всіх командах запускаються демоном cron можна в каталозі / var / log називаються cron, cron1 і т.д.

У файлі / var / log / cron записано час запуску всіх завдань cron за попередній день

Mar 29 4:03:00 rst CROND [4434]: (user) CMD (/ home / user / mail)
Mar 29 4:03:59 rst CROND [4493]: (user) CMD (/ home / user / mail)
Mar 29 4:05:00 rst CROND [4507]: (user) CMD (/ home / user / mail)
Mar 29 4:06:00 rst CROND [4549]: (user) CMD (/ home / user / mail)

В інших файлах cron1, cron2 знаходиться подібна інформація, але старіша ніж в cron

Ось практично і все, що потрібно знати для використання cron і crontab.

Схожі статті