Планування робіт за допомогою команди at

Матеріал з docs.linux.org.ua — збірника документації з Unix/Linux українською мовою.

Перейти до: навігація, пошук

Інколи потрібно виконати якусь роботу автоматично у час не дуже зручний для адміністратора. Можливо, зараз офісний сервер надзвичайно загружений, чи файл, який потрібно обробити, буде завантажено в систему не раніш ніж опівночі, а може ви хочете змінити сторінку на вашому веб-сервері у безпечний час, коли на ньому дуже мало користувачів. У той час адміністратор може собі спокійно спати і бачити сни або пити пиво з друзями. Залишати друзів заради роботи якось не годиться, а прокидатися серед ночі, аби запустити пару команд - це взагалі жах. Що ж робить? На щастя, існує така команда як at (українською о: напр, завтра о сьомій), яка допомагає розв'язяти цю проблему дуже просто.

Запустити цю команду можна так: at час_виконання і потім ввести серію команд зі стандартного вводу, напр.: at 23:20 At видасть попередження, про те, яка саме оболонка виконає ваші команди. На своєму Лінуксі я бачу таке: warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh. А потім попросить вас ввести необхідні команди, напр., таке:

   at> echo робота готова
   at> ^D
   job 5 at 2004-03-20 23:20

Лишень не забудьте, що закінчення файла подається через Crtl+D (^D) . От і все. Перевірте свою поштову скриньку після 23:20 за часом сервера і ви повинні побачити там таке повідомлення: "робота готова".

at розпізнає багато часових форматів. Узагальнюючи, можна сказати, що спочатку подається час, а потім дата. Найлегше це пояснити на прикладах:

Приклад Пояснення
at 14:00 at запустить роботу

о 14:00. Якщо сьогодні вже після 14-ї, то роботу буде виконано в цей же час наступного дня.

at 10AM
at 10PM
Десята ранку(АМ) чи вечора (РМ)
at 4:00 032004 О 4-й ранку 20 бер. 2004
at 14:30 бер 20
at 14:30 бер 20 2004
Якщо локаль правильно

налаштована, at розпізнає українські назви місяців

at 4am +5 days
О 4-й ранку через 5 днів
at 4am +5 weeks О 4-й ранку через 5 тижнів
at 1pm tomorrow
Завтра о першій дня.
at midnight
Опівночі
at teatime
16:00 (коли англійці п'ють чай :)
at now
зараз
at now +5 min
через 5 хвилин

Дозвіл задавати роботи через at контролюється за допомогою файлів /etc/at.allow (кому можна) та /etc/at.deny (а кому - зась).

Вводити послідовність команд для виконання через at напряму з клавіатури може бути заскладним завданням. Тому це краще робити за допомогою оболонки: at +10 hours < job.sh, або за допомогою опції -f, напр.: at -f job.sh +10 hours. Увага: at зчитує зміст файла у самий момент запуску команди, а не в момент виконання роботи. Таким чином зміни файла зроблені після запуску at не матимуть жодного ефекту під час виконання роботи.

Інші корисні опції:

   -V показує версію at
   -m посилає електронне повідомлення навіть якщо робота не видала нічого на стандартний вивід

Переглянути заплановані роботи можна за допомогою команди atq (at queue - "черга команди at"):

   $ atq
   10      2004-03-25 04:00 a kuzma
   13      2004-04-24 04:00 a kuzma

А відмінити - за допомогою atrm (at remove - "видалення команд для at")

   $ atrm 10
   $ atq    
   13      2004-04-24 04:00 a kuzma
Особисті інструменти