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

У минулій статті я вже розповідав про програми cron і crontab. які використовуються для планування періодично повторюваних дій в системі GNU / Linux.

Але в деяких випадках вам може знадобитися одноразово виконати завдання в заданий час, як раз для цієї мети краще всього підходить програма at. яка також дозволяє виконувати команди під час зниження завантаження системи.

Таким чином, головним завданням програми at є "планування одноразового виконання завдання". У цьому плані вона схожа на програму cron. яка зазвичай використовується для планування періодично повторюваних завдань; давайте розглянемо основні приклади використання цієї програми.

Програма at є частиною набору, що складається з чотирьох програм: at. batch. atq і atrm:

  • at виконує завдання в призначений час.
  • atq виводить список очікують виконання завдань для кожного користувача; в разі використання суперкористувачем, виводяться всі очікують виконання завдання.
  • atrm видаляє завдання, задані ідентифікаторами.
  • batch виконує завдання під час періодів низьку завантаженість системи; іншими словами, коли середній рівень завантаження системи падає нижче значення 1.5 або того значення, яке задано при виклику atd.

Використання програми at

Після запуску at пропонує вам ввести послідовність команд для виконання. Щоб закінчити введення команд, слід використовувати комбінацію клавіш CTRL-D. Опис основних параметрів командного рядка at наведено нижче:

Значення цих параметрів:

  • -q використовується для вказівки черзі. Черга позначається однією буквою; коректними чергами вважаються черзі з ідентифікаторами від a до z і від A до Z. Черга з ідентифікатором a використовується за умовчанням, а чергу з ідентифікатором b є чергою для програми batch. Команди з черг з ідентифікаторами, що знаходяться далі за алфавітом, виконуються з більш високим пріоритетом (nice). Спеціальна чергу "=" зарезервована для команд, що виконуються в даний момент. Якщо команда додана в чергу, ідентифікатором якої є велика літера, вважається, що команда передана програмі batch. У тому випадку, якщо програмі atq переданий ідентифікатор черги, програма виведе команди, що знаходяться тільки в цій черзі.
  • -m дозволяє відправити користувачеві повідомлення по електронній пошті після виконання завдання навіть в тому випадку, коли виконана програма нічого не вивела.
  • -f дозволяє прочитати команди з файлу, а не зі стандартного введення.
  • Як часу at приймає рядки в форматах, сумісних зі стандартом POSIX.2. Приймається рядок, яка вказує час в форматі ГГ: ХХ. що дозволяє виконати команду в призначений час протягом дня. Ви також можете задати день для виконання команди за допомогою рядка, що вказує дату в форматі імені місяці і дні з необов'язковим зазначенням року або задавши дату рядком формату ММДДГГ або ММ / ДД / РР або дд.мм.гг. Зазначення дати має слідувати за вказівкою часу.

Під час проведення тестів точний час було наступним:

У тому випадку, якщо задати тільки час, завдання буде запланована на наступний момент досягнення цього часу, наприклад, я задав час 20.00, а виконання завдання було заплановано на наступний день в цей час:

При цьому, якщо задати час, яке ще не настало сьогодні, виконання завдання буде заплановано на цей же день:

А це ще один приклад з використанням поєднання клавіш CTRL + D для завершення введення команд:

На мій погляд, висновок програми не особливо корисний, так як ви не можете подивитися, яка команда виконується в рамках завдання з ідентифікатором 3 або будь-який інший завдання.

Для того, щоб побачити, що буде виконуватися в рамках завдання, ви можете використовувати наступну команду:

Вона виведе довгий список змінних оточення для виконання команди і саму команду:

#! / Bin / sh
# Atrun uid = 1000 gid = 1000
# Mail linuxaria 0
umask 22
SSH_AGENT_PID = 1579; export SSH_AGENT_PID
XDG_SESSION_COOKIE = 586bed7d66c5f3bf0810f6ce0000001c-1350495018.439467-8023144; export XDG_SESSION_COOKIE
WINDOWID = 25165830; export WINDOWID
GNOME_KEYRING_CONTROL = / tmp / keyring-m0UVoj; export GNOME_KEYRING_CONTROL
USER = linuxaria; export USER
LIBGL_DRIVERS_PATH = / usr / lib / fglrx / dri: / usr / lib32 / fglrx / dri; export LIBGL_DRIVERS_PATH
SSH_AUTH_SOCK = / tmp / ssh-DbbUjzXR1501 / agent.1501; export SSH_AUTH_SOCK
USERNAME = riccio; export USERNAME
SESSION_MANAGER = local / mint-desktop: @ / tmp / .ICE-unix / 1501, unix / mint-desktop: /tmp/.ICE-unix/1501; export SESSION_MANAGER
DEFAULTS_PATH = / usr / share / gconf / default.default.path; export DEFAULTS_PATH
XDG_CONFIG_DIRS = / etc / xdg / xdg-default: / etc / xdg; export XDG_CONFIG_DIRS
PATH = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games; export PATH
DESKTOP_SESSION = default; export DESKTOP_SESSION
PWD = / tmp; export PWD
GNOME_KEYRING_PID = 1424; export GNOME_KEYRING_PID
LANG = en_US.UTF-8; export LANG
MANDATORY_PATH = / usr / share / gconf / default.mandatory.path; export MANDATORY_PATH
MDM_XSERVER_LOCATION = local; export MDM_XSERVER_LOCATION
SHLVL = 1; export SHLVL
HOME = / home / linuxaria; export HOME
LOGNAME = linuxaria; export LOGNAME
XDG_DATA_DIRS = / usr / share / default: / usr / local / share /: / usr / share /: / usr / share / mdm /; export XDG_DATA_DIRS
DBUS_SESSION_BUS_ADDRESS = unix: abstract = / tmp / dbus-QWgLeCbkps, guid = b1c32f270937311ee26524ff00000031; export DBUS_SESSION_BUS_ADDRESS
MDMSESSION = default; export MDMSESSION
WINDOWPATH = 8; export WINDOWPATH
MDM_LANG = en_US.UTF-8; export MDM_LANG
XAUTHORITY = / home / linuxaria / .Xauthority; export XAUTHORITY
COLORTERM = gnome-terminal; export COLORTERM
cd / tmp // echo 'Execution directory inaccessible'> 2
exit 1
>
cp -a / project / source / * / backup / source / ^ C

Цей висновок дозволяє набагато краще зрозуміти призначення завдання.

Видалення запланованої завдання за допомогою atrm

Ми навчилися переглядати список запланованих завдань і при бажанні їх вміст, тепер настав час розглянути спосіб їх видалення з черги за допомогою програми atrm або команди at -d для видалення певної задачі.

Таким чином, для видалення завдання з ідентифікатором 3, вам необхідно просто ввести команду:

Дана команда нічого не виводить в консоль, але після її виконання ви можете переконатися в видаленні завдання за допомогою команди atq.

Обмеження кола користувачів програми at

Файли /etc/at.allow і /etc/at.deny встановлюють користувачів, які можуть планувати завдання для подальшого виконання за допомогою программat і batch. Як формат цих файлів використовується простий список імен користувачів по одному в кожному рядку. Використання прогалин в цих файлах не допускається.

Користувач root може використовувати програми at і batch при будь-яких умовах.

У разі існування файлу /etc/at.allow. на його основі встановлюється коло користувачів, яким дозволено планування завдань, але зазвичай в системах цього файлу не існує.

Якщо файлу /etc/at.allow не існує, перевіряється файл /etc/at.deny. який зазвичай містить довгий список "системних користувачів", таких какbin. backup. ftp або www-data. для яких планування завдань заборонено.