Як використовувати команди at і групувати в Linux для планування команд

Якщо ви хочете запланувати завдання Linux, яке буде виконуватися лише один раз, cron — це зайве. Сімейство команд – це те, що вам потрібно! І якщо ви хочете запускати процеси лише тоді, коли ваша система має вільні ресурси, ви можете використовувати пакетний режим.

Як запланувати роботу Linux

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

Однак це не допоможе, якщо ви хочете запланувати виконання завдання лише один раз. Звичайно, ви можете налаштувати його в cron, але тоді ви повинні не забути повернутися і видалити файл запис crontab після виконання завдання, що незручно.

З Linux, якщо ви боретеся з проблемою, це майже гарантія, що хтось інший теж стикався з нею. На щастя, оскільки Unix-подібні операційні системи існують так давно, є також чудовий шанс, що хтось створив рішення для вашої проблеми.

Для проблеми, описаної вище, у них є, і вона називається.

Встановлення at Command

Нам довелося встановити at на Ubuntu 18.04 і Manjaro 18.1.0 (вона вже була встановлена ​​на Fedora 31).

Щоб встановити на Ubuntu, скористайтеся цією командою:

sudo apt-get install at

The

Після завершення встановлення ви можете запустити демон at за допомогою цієї команди:

sudo systemctl enable --now atd.service

The

На Manjaro ви встановлюєте at за допомогою цієї команди:

sudo pacman -Sy at

The

Після завершення встановлення введіть цю команду, щоб запустити демон at:

sudo systemctl enable --now atd.service

The

У будь-якому дистрибутиві ви можете ввести цю команду, щоб переконатися, що демон atd запущено:

ps -e | grep atd

The

Як використовувати команду at інтерактивно

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

Однак, незважаючи на те, що ми збираємося використовувати at в інтерактивному режимі, ви повинні вказати дату та час заздалегідь. Якщо ви нічого не включите в командний рядок або введете щось, що не є датою та часом, at відповідає «Спотворений час», як показано нижче:

at
at banana

Неправильне використання

Дати та час можуть бути явними або відносними. Наприклад, припустимо, що ви хочете, щоб команда виконувалася через одну хвилину. at знає, що означає “зараз”, тому ви можете використовувати зараз і додати до нього одну хвилину, наприклад:

at now + 1 minute

The

at друкує повідомлення та підказку at і чекає, поки ви введете команди, які потрібно запланувати. Однак спочатку розгляньте повідомлення, як показано нижче:

  5 найкращих записувачів екрану для Linux

The

Він повідомляє вам під час запуску екземпляра оболонки sh і буде запустіть команди всередині нього. Ваші команди не виконуватимуться в оболонці Bash, яка сумісна з оболонкою sh, але має більш багатий набір функцій.

Якщо ваші команди або сценарії намагаються використати функцію або засіб, які надає Bash, але sh цього не робить, вони зазнають невдачі.

Легко перевірити, чи виконуватимуться ваші команди чи сценарії в sh. Використовуйте команду sh, щоб запустити оболонку sh:

sh

The

Командний рядок змінюється на знак долара ($), і тепер ви можете запустити свої команди та перевірити, чи вони працюють правильно.

Щоб повернутися до оболонки Bash, введіть команду exit:

exit

Ви не побачите жодного стандартного виводу чи повідомлень про помилки від команд. Це тому, що оболонка sh запускається як фонове завдання і працює без будь-якого екранного інтерфейсу.

Будь-який результат команд — хороший чи поганий — надсилається вам електронною поштою. Він надсилається через внутрішню поштову систему тому, хто виконує команду at. Це означає, що вам потрібно налаштувати та налаштувати внутрішню систему електронної пошти.

Багато (більшість) систем Linux не мають внутрішньої системи електронної пошти, оскільки вона рідко потрібна. Ті, які зазвичай використовують таку систему, як sendmail або постфікс. Якщо у вашій системі немає внутрішньої системи електронної пошти, ви можете налаштувати запис сценаріїв у файли або переспрямувати вихід у файли, щоб додати журнал.

Якщо команда не генерує жодного стандартного виводу чи повідомлень про помилки, ви все одно не отримаєте електронного листа. Багато команд Linux вказують на успіх через мовчання, тому в більшості випадків ви не отримаєте електронного листа.

Тепер настав час ввести команду at. Для цього прикладу ми використаємо невеликий файл сценарію під назвою sweep.sh, який видаляє файли *.bak, *.tmp і *.o. Введіть шлях до команди, як показано нижче, а потім натисніть Enter.

The

З’явиться інший командний рядок, і ви можете додати скільки завгодно команд. Зазвичай зручніше мати команди в одному сценарії і просто викликати цей сценарій зсередини на.

Натисніть Ctrl+D, щоб повідомити, що ви закінчили додавати команди. на виставках , що означає кінець передачі. Вам повідомляють номер завдання та час виконання завдання, як показано нижче:

Підтвердження

Після виконання завдання введіть наступне, щоб перевірити внутрішню пошту:

mail

The

Якщо немає пошти, ви повинні припустити успіх. Звичайно, у цьому випадку ви можете перевірити, чи були видалені файли *.bak, *.tmp і *.o, щоб підтвердити, що команда спрацювала.

Введіть наступне, щоб запустити все знову:

at now + 1 minute

The

Через одну хвилину введіть наступне, щоб повторно перевірити свою пошту:

mail

The

Гей, у нас є пошта! Щоб прочитати повідомлення номер один, натисніть 1, а потім натисніть Enter.

Ми отримали електронний лист від at, оскільки команди в сценарії створили повідомлення про помилки. У цьому прикладі не було файлів для видалення, тому що, коли ми запустили сценарій раніше, він видалив їх.

Натисніть D+Enter, щоб видалити електронний лист, і Q+Enter, щоб вийти з програми електронної пошти.

Формати дати та часу

Ви маєте велику гнучкість, коли справа доходить до форматів часу, які ви можете використовувати. Ось кілька прикладів:

  3 найкращі способи знайти файли та папки за допомогою терміналу Linux

Запуск об 11:00:

at 11:00 AM

Запуск завтра об 11:00:

at 11:00 AM tomorrow

Запуск об 11:00 цього дня наступного тижня:

at 11:00 AM next week

Виконайте в цей час, цього дня, наступного тижня:

at next week

Запуск об 11:00 наступної п’ятниці:

at 11:00 AM next fri

Запуск наступної п’ятниці в цей час:

at next fri

Запуск об 11:00 цієї дати наступного місяця:

at 11:00 AM next month

Запуск об 11:00 на певну дату:

at 11:00 AM 3/15/2020

Біг через 30 хвилин:

at now + 30 minutes

Біг через дві години:

at now + 2 hours

Бігайте завтра в цей час:

at tomorrow

Запуск у цей час у четвер:

at thursday

Запуск о 12:00:

at midnight

Запуск о 12:00:

at noon

Якщо ви британец, ви навіть можете запланувати виконання команди під час чаювання (16:00):

at teatime

Дивлячись на чергу вакансій

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

Вихід з

Для кожної команди в черзі atq відображає таку інформацію:

Ідентифікатор роботи
Запланована дата
Запланований час
Поставте в чергу завдання. Черги позначаються «a», «b» тощо. Звичайні завдання, які ви плануєте на , переходять до черги «a», тоді як завдання, які ви плануєте за допомогою пакету (розглянуто далі в цій статті), потрапляють в чергу «b».
Особа, яка запланувала роботу.

Використання at у командному рядку

Вам не потрібно використовувати at в інтерактивному режимі; ви також можете використовувати його в команді. Це полегшує використання всередині сценаріїв.

Ви можете передавати команди в at, наприклад:

echo "sh ~/sweep.sh" | at 08:45 AM

An

Завдання прийнято та заплановано до о, а номер завдання та дата виконання повідомляються так само, як і раніше.

Використання at з файлами команд

Ви також можете зберегти послідовність команд у файлі, а потім передати її в at. Це може бути звичайний текстовий файл команд — це не обов’язково має бути виконуваний сценарій.

Ви можете використовувати параметр -f (файл) у такий спосіб, щоб передати ім’я файлу на адресу:

at now + 5 minutes -f clean.txt

An

Ви можете досягти того ж результату, якщо переспрямувати файл за адресою:

at now + 5 minutes 

An

Removing Scheduled Jobs from the Queue

To remove a scheduled job from the queue, you can use the atrm command. If you want to see the queue first to find the number of the job you want to remove, you can use atq . Then, use that job number with atrm, as shown below:

atq
atrm 11
atq

Як переглянути детальний огляд вакансій

Як ми вже згадували раніше, ви можете планувати роботу далеко в майбутньому. Іноді ви можете забути, що збирається виконувати робота. Команда atq показує вам завдання в черзі, але не показує, що вони збираються робити. Якщо ви хочете побачити детальний перегляд завдання, ви можете використовувати параметр -c (кішка).

Спочатку ми використаємо atq, щоб знайти номер роботи:

atq

Вихід з

Тепер ми будемо використовувати завдання номер 13 з опцією -c:

at -c 13

The

Ось розбивка інформації, яку ми отримуємо про роботу:

Перший рядок: це повідомляє нам, що команди виконуватимуться під оболонкою sh.
Другий рядок: ми бачимо, що команди виконуватимуться як з ідентифікатором користувача, так і з групою 1000. Це значення для людини, яка запустила команду at.
Третій рядок: людина, яка отримує будь-які електронні листи, відправляє.
Четвертий рядок: The Маска користувача дорівнює 22. Це маска, яка використовується для встановлення дозволів за замовчуванням для будь-яких файлів, створених у цьому сеансі sh. Маска віднімається від 666, що дає нам 644 (вісімковий еквівалент rw-r--r--).
Дані, що залишилися: більшість із них є змінними середовища.

Вихід з

Результати тесту. Тест перевіряє, чи можна отримати доступ до каталогу виконання. Якщо це не вдається, виникає помилка, і виконання завдання припиняється.
Команди, які потрібно виконати. Вони відображаються в списку, а також відображається вміст запланованих сценаріїв. Зауважте, що хоча сценарій у нашому прикладі вище був написаний для виконання під Bash, він все одно виконуватиметься в оболонці sh.

Пакетна команда

Пакетна команда діє аналогічно на команду, але з трьома суттєвими відмінностями:

Ви можете використовувати команду пакета лише в інтерактивному режимі.
Замість того, щоб планувати виконання завдань у певний час, ви додаєте їх до черги, і пакетна команда виконує їх, коли середнє навантаження системи нижче 1,5.
У зв’язку з вищесказаним, ви ніколи не вказуєте дату та час за допомогою пакетної команди.

Коли ви використовуєте пакетну команду, ви викликаєте її по імені без параметрів командного рядка, наприклад:

batch

The

Далі додайте завдання так само, як і за допомогою команди at.

Контроль доступу до команди at

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

Ось як вони працюють:

at.deny: перелічує програми та сутності, які не можна використовувати для планування завдань.
at.allow: списки, які можуть використовувати at для планування завдань. Якщо файл at.allow не існує, at використовує лише файл at.deny.

За замовчуванням будь-хто може використовувати at. Якщо ви хочете обмежити, хто може використовувати його, скористайтеся файлом at.allow, щоб перерахувати тих, хто може використовувати. Це легше, ніж додавати всіх, хто не може використовувати at, до файлу at.deny.

Ось як виглядає файл at.deny:

sudo less /etc/at.deny

The

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

Тепер ми відредагуємо файл at.allow. Ми збираємося додати Дейва і Мері, але нікому іншому не буде дозволено використовувати at.

Спочатку вводимо наступне:

sudo gedit /etc/at.allow

The

У редакторі ми додаємо два назви, як показано нижче, а потім зберігаємо файл.

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

at

Йому було б відмовлено, як показано нижче.

Знову ж таки, Еріка немає у файлі at.deny. Щойно ви додаєте будь-кого до файлу at.allow, будь-якому та всім іншим буде відмовлено у дозволі на використання at.

Чудово підходить для одноразових

Як бачите, і at, і пакет ідеально підходять для завдань, які потрібно виконати лише один раз. Знову, як короткий огляд:

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