107.2 Урок 2
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
107 Адміністративні завдання |
Тема: |
107.2 Автоматизація завдань системного адміністрування, планування завдань |
Урок: |
2 з 2 |
Вступ
Як ви дізналися з попереднього уроку, ви можете планувати звичайні завдання за допомогою таймерів cron або systemd, але іноді вам може знадобитися виконати завдання в певний час у майбутньому лише один раз. Для цього ви можете скористатися іншою потужною утилітою: командою at
.
Планування роботи за допомогою at
Команда at
використовується для одноразового планування завдань і вимагає лише вказати час виконання завдання в майбутньому. Після введення at
у командному рядку з подальшою специфікацією часу ви побачите підказку at
, де зможете визначити команди, які потрібно виконати. Ви можете вийти з підказки, натиснувши послідовність клавіш Ctrl+D.
$ at now +5 minutes warning: commands will be executed using /bin/sh at> date at> Ctrl+D job 12 at Sat Sep 14 09:15:00 2019
Завдання at
у наведеному вище прикладі просто виконує команду date
через п’ять хвилин. Подібно до cron
, стандартне виведення і помилка надсилаються вам електронною поштою. Зауважте, що демон atd
має бути запущений у системі, щоб ви могли використовувати планування завдань at
.
Note
|
У Linux команда |
Найважливіші параметри, які застосовуються до команди at
:
-c
-
Вивести команди певного ID завдання у стандартне виведення.
-d
-
Видалити завдання на основі їх ID. Це псевдонім для
atrm
. -f
-
Читати завдання з файлу замість стандартного введення.
-l
-
Показати незавершені завдання користувача. Якщо користувач root, виводяться всі завдання всіх користувачів. Це псевдонім для
atq
. -m
-
Надіслати пошту користувачеві після завершення завдання, навіть якщо результату не було.
-q
-
Вказати чергу у вигляді однієї літери від
a
доz
і відA
доZ
(за умовчаннямa
дляat
іb
дляbatch
). Роботи в чергах з найвищими буквами виконуються з підвищеною акуратністю. Завдання, надіслані до черги з великої літери, розглядаються як пакетні завдання. -v
-
Показати час виконання завдання перед його читанням.
Список запланованих завдань за допомогою atq
Тепер давайте заплануємо ще два завдання at
: перше виконує сценарій foo.sh
о 09:30, а друге виконує сценарій bar.sh
через одну годину.
$ at 09:30 AM warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 13 at Sat Sep 14 09:30:00 2019 $ at now +2 hours warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 14 at Sat Sep 14 11:10:00 2019
Щоб переглянути список незавершених завдань, ви можете скористатися командою atq
, яка показує таку інформацію для кожного завдання: ідентифікатор завдання, дата виконання завдання, час виконання завдання, черга та ім’я користувача.
$ atq 14 Sat Sep 14 11:10:00 2019 a frank 13 Sat Sep 14 09:30:00 2019 a frank 12 Sat Sep 14 09:15:00 2019 a frank
Пам’ятайте, що команда at -l
є псевдонімом atq
.
Note
|
Якщо ви запустите |
Видалення завдання за допомогою atrm
Якщо ви бажаєте видалити завдання at
, ви можете використати команду atrm
, за якою слід вказати ідентифікатор завдання. Наприклад, щоб видалити завдання з ID 14, ви можете виконати наступне:
$ atrm 14
Ви можете видалити кілька завдань за допомогою atrm
, вказавши кілька ідентифікаторів, розділених пробілами. Пам’ятайте, що команда at -d
є псевдонімом atrm
.
Note
|
Якщо ви запускаєте |
Налаштуваня доступу до планування завдань
Авторизація для звичайних користувачів щодо планування завдань at
визначається файлами /etc/at.allow
і /etc/at.deny
. Якщо /etc/at.allow
існує, лише некореневі користувачі, перелічені в ньому, можуть планувати завдання at
. Якщо /etc/at.allow
не існує, але /etc/at.deny
існує, лише некореневі користувачі, перелічені в ньому, не можуть планувати завдання at
(у цьому випадку порожній /etc/at.deny
файл означає, що кожному користувачеві дозволено планувати завдання at
). Якщо жоден із цих файлів не існує, доступ користувача до планування завдань at
залежить від дистрибутива, що використовується.
Специфікації часу
Ви можете вказати, коли виконувати певне завдання at
, використовуючи формат HH:MM
, який необов’язково супроводжується AM або PM у випадку 12-годинного формату. Якщо зазначений час уже минув, передбачається наступний день. Якщо ви хочете запланувати конкретну дату, на яку буде виконано завдання, ви повинні додати інформацію про дату після часу, використовуючи одну з таких форм: month-name day-of-month
, month-name day-of-month year
, MMDDYY
, MM/DD/YY
, DD.MM.YY
та YYYY-MM-DD
).
Також приймаються такі ключові слова: midnight
, noon
, teatime
(4 pm) і now
, за якими йде знак плюс (+
) і період часу (хвилини, години, дні та тижні). Нарешті, ви можете вказати at
виконати завдання сьогодні або завтра, додавши до часу суфікс слова today
або tomorrow
. Наприклад, ви можете використовувати at 07:15 AM Jan 01
, щоб виконати завдання о 07:15 ранку 1 січня, і at now +5 minutes
, щоб виконати завдання через п’ять хвилин. Ви можете прочитати файл timespec
у дереві /usr/share
, щоб дізнатися більше про точне визначення специфікацій часу.
Альтернатива at
Використовуючи systemd як менеджер системи та служб, ви також можете планувати одноразові завдання за допомогою команди systemd-run
. Зазвичай вона використовується для створення блоку тимчасового таймера, щоб команда виконувалася в певний час без необхідності створення службового файлу. Наприклад, діючи від імені root, ви можете виконати команду date
об 11:30 ранку 2019/10/06, використовуючи наступне:
# systemd-run --on-calendar='2019-10-06 11:30' date
Якщо ви хочете запустити сценарій foo.sh
, розташований у вашому поточному робочому каталозі, через дві хвилини ви можете використати:
# systemd-run --on-active="2m" ./foo.sh
Зверніться до man-сторінок, щоб дізнатися про всі можливі способи використання systemd-run
із systemd-run(1)
.
Note
|
Пам’ятайте, що таймери реєструються в журналі systemd, і ви можете переглядати журнали різних модулів за допомогою команди |
Вправи до посібника
-
Для кожної з наведених нижче специфікацій часу вкажіть, яка дійсна, а яка недійсна для
at
:at 08:30 AM next week
at midday
at 01-01-2020 07:30 PM
at 21:50 01.01.20
at now +4 days
at 10:15 PM 31/03/2021
at tomorrow 08:30 AM
-
Якщо ви запланували завдання за допомогою
at
, як ви можете їх переглянути? -
Які команди можна використовувати для перегляду незавершених завдань? Якими командами ви б їх видалили?
-
Яка команда з systemd використовується як альтернатива
at
?
Дослідницькі вправи
-
Створіть завдання
at
, яке запускає сценарійfoo.sh
, розташований у вашому домашньому каталозі, о 10:30 31 жовтня. Припустимо, ви дієте як звичайний користувач. -
Увійдіть у систему як інший звичайний користувач і завтра о 10:00 створіть інше завдання
at
, яке завтра о 10:00 запускає сценарійbar.sh
. Припустимо, що сценарій знаходиться в домашньому каталозі користувача. -
Увійдіть у систему як інший звичайний користувач і створіть інше завдання
at
, яке запускає сценарійfoobar.sh
лише через 30 хвилин. Припустимо, що сценарій знаходиться в домашньому каталозі користувача. -
Тепер від імені користувача root виконайте команду
atq
, щоб переглянути заплановані завданняat
для всіх користувачів. Що станеться, якщо звичайний користувач виконає цю команду? -
Як root видаліть усі ці незавершені завдання
at
за допомогою однієї команди. -
Виконайте команду
ls -l /usr/bin/at
і перевірте її дозволи.
Підсумки
В цьому уроці ми вивчили:
-
Використання
at
для запуску одноразових завдань в певний час. -
Керування завданнями
at
. -
Налаштування доступу користувача до планування завдань
at
. -
Використання
systemd-run
в якості альтернативиat
.
У цьому уроці обговорювалися такі файли та команди:
at
-
Виконує команди в заданий час.
atq
-
Виводить перелік незавершених завдань користувача, якщо користувач не є суперкористувачем.
atrm
-
Видаляє завдання
at
, ідентифіковані їх номерами. /etc/at.allow
and/etc/at.deny
-
Окремі файли, які використовуються для встановлення обмежень
at
. systemd-run
-
Створює і запускає перехідний блок
timer
як альтернативуat
для одноразового планування.
Відповіді до вправ посібника
-
Для кожної з наведених нижче специфікацій часу вкажіть, яка дійсна, а яка недійсна для
at
:at 08:30 AM next week
Дійсна
at midday
Недійсна
at 01-01-2020 07:30 PM
Недійсна
at 21:50 01.01.20
Дійсна
at now +4 days
Дійсна
at 10:15 PM 31/03/2021
Недійсна
at tomorrow 08:30 AM monotonic
Недійсна
-
Якщо ви запланували завдання за допомогою
at
, як ви можете їх переглянути?Ви можете використовувати команду
at -c
, за якою слідує ідентифікатор завдання, команди якого ви хочете переглянути. Зауважте, що вихідні дані також містять більшу частину середовища, яке було активним на момент запланованого завдання. Пам’ятайте, що root може переглядати завдання всіх користувачів. -
Які команди можна використовувати для перегляду незавершених завдань? Якими командами ви б їх видалили?
Ви можете використати команду
at -l
, щоб переглянути незавершені завдання, а також командуat -d
, щоб видалити свої завдання.at -l
є псевдонімом дляatq
, аat -d
є псевдонімом дляatrm
. Пам’ятайте, що root може дивитися та видаляти завдання всіх користувачів. -
Яка команда з systemd використовується як альтернатива
at
?Команду
systemd-run
можна використовувати як альтернативуat
для планування одноразових завдань. Наприклад, ви можете використовувати її для запуску команд у певний час, визначаючи календарний таймер або монотонний таймер відносно різних початкових точок.
Відповіді до дослідницьких вправ
-
Створіть завдання
at
, яка запускає сценарійfoo.sh
, розташований у вашому домашньому каталозі, о 10:30 31 жовтня. Припустимо, ви дієте як звичайний користувач.$ at 10:30 AM October 31 warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 50 at Thu Oct 31 10:30:00 2019
-
Увійдіть у систему як інший звичайний користувачі створіть інше завдання
at
, яке завтра о 10:00 запускає сценарійbar.sh
. Припустимо, що сценарій знаходиться в домашньому каталозі користувача.$ at 10:00 AM tomorrow warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 51 at Sun Oct 6 10:00:00 2019
-
Увійдіть у систему як інший звичайний користувач і створіть інше завдання
at
, яке завтра о 10:00 запускає сценарійbar.sh
. Припустимо, що сценарій знаходиться в домашньому каталозі користувача.$ at now +30 minutes warning: commands will be executed using /bin/sh at> ./foobar.sh at> Ctrl+D job 52 at Sat Oct 5 10:19:00 2019
-
Тепер від імені користувача root виконайте команду
atq
, щоб переглянути заплановані завданняat
для всіх користувачів. Що станеться, якщо звичайний користувач виконає цю команду?# atq 52 Sat Oct 5 10:19:00 2019 a dave 50 Thu Oct 31 10:30:00 2019 a frank 51 Sun Oct 6 10:00:00 2019 a emma
Якщо ви виконуєте команду
atq
від імені користувача root, буде показано всі незавершені завданняat
для всіх користувачів. Якщо ви запускаєте команду як звичайний користувач, у списку будуть лише ваші власні незавершені завдання. -
Як root видаліть усі ці незавершені завдання
at
за допомогою однієї команди.# atrm 50 51 52
-
Від імені користувача root виконайте команду ls -l /usr/bin/at і перевірте її дозволи.
# ls -l /usr/bin/at -rwsr-sr-x 1 daemon daemon 43762 Dec 1 2015 /usr/bin/at
У цьому дистрибутиві команда
at
має встановлені біти SUID (символs
замість прапора виконуваного файлу для власника) і SGID (символs
замість прапора виконуваного файлу для групи), це означає що команда виконується з привілеями власника та групи файлу (daemon
для обох). Ось чому звичайні користувачі можуть планувати завдання за допомогоюat
.