Как да използвате 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

В

След като инсталацията приключи, можете да стартирате демона at с тази команда:

sudo systemctl enable --now atd.service

В

На Manjaro инсталирате at с тази команда:

sudo pacman -Sy at

В

След като инсталацията приключи, въведете тази команда, за да стартирате демона at:

sudo systemctl enable --now atd.service

В

Във всяка дистрибуция можете да въведете тази команда, за да се уверите, че демонът atd работи:

ps -e | grep atd

В

Как да използвате интерактивно командата at

За да използвате в, трябва да му зададете дата и час за изпълнение. Има голяма гъвкавост в начина, по който можете да ги напишете, което ще разгледаме по-късно в тази статия.

Въпреки това, въпреки че ще използваме at интерактивно, трябва да предоставите датата и часа предварително. Ако не включите нищо в командния ред или въведете нещо, което не е дата и час, at отговаря с „Изкривено време“, както е показано по-долу:

at
at banana

Неправилно използване на

Датите и часовете могат да бъдат изрични или относителни. Например, да приемем, че искате командата да се изпълни след една минута. at знае какво означава „сега“, така че можете да използвате сега и да добавите една минута към него, така:

at now + 1 minute

В

at отпечатва съобщение и при подкана и чака да въведете командите, които искате да планирате. Първо обаче помислете за съобщението, както е показано по-долу:

  Как да поставите тема за хипер терминал на Linux

В

Той ви казва при стартиране екземпляр на sh shell и ще изпълнете командите вътре в него. Вашите команди няма да се изпълняват в обвивката Bash, която е съвместима с обвивката sh, но има по-богат набор от функции.

Ако вашите команди или скриптове се опитат да използват функция или средство, което Bash предоставя, но sh не го прави, те ще се провалят.

Лесно е да тествате дали вашите команди или скриптове ще се изпълняват в sh. Използвайте командата sh, за да стартирате sh обвивка:

sh

В

Командният ред се променя на знак за долар ($) и вече можете да изпълнявате командите си и да проверите дали работят правилно.

За да се върнете към обвивката на Bash, въведете командата за изход:

exit

Няма да видите стандартен изход или съобщения за грешка от командите. Това е така, защото обвивката sh се стартира като фонова задача и работи без какъвто и да е екранен интерфейс.

Всеки изход от командите – добър или лош – ви се изпраща по имейл. Изпраща се чрез вътрешната пощенска система до този, който изпълнява командата at. Това означава, че трябва да настроите и конфигурирате тази вътрешна имейл система.

Много (повечето) Linux системи нямат вътрешна имейл система, тъй като рядко има нужда от такава. Тези, които обикновено използват система като изпрати писмо или постфикс. Ако вашата система няма вътрешна имейл система, можете да накарате скриптове да пишат във файлове или да пренасочите изход към файлове, за да добавите регистриране.

Ако командата не генерира стандартен изход или съобщения за грешка, така или иначе няма да получите имейл. Много Linux команди показват успех чрез мълчание, така че в повечето случаи няма да получите имейл.

Сега е време да въведете команда в at. За този пример ще използваме малък скриптов файл, наречен sweep.sh, който изтрива *.bak, *.tmp и *.o файловете. Въведете пътя до командата, както е показано по-долу, и след това натиснете Enter.

В

Появява се друг команден ред и можете да добавите толкова команди, колкото искате. Обикновено е по-удобно да имате командите си в един скрипт и просто да извикате този скрипт отвътре в.

Натиснете Ctrl+D, за да кажете, че сте готови с добавянето на команди. на шоута , което означава край на предаването. Казват ви номера на заданието и кога е планирано изпълнението на заданието, както е показано по-долу:

Потвърждение на

След като задачата се изпълни, въведете следното, за да проверите вътрешната си поща:

mail

В

Ако няма поща, трябва да приемете успех. Разбира се, в този случай можете да проверите и да видите дали *.bak, *.tmp и *.o файловете са били изтрити, за да потвърдите, че командата работи.

Въведете следното, за да стартирате всичко отново:

at now + 1 minute

В

След една минута въведете следното, за да проверите отново пощата си:

mail

В

Хей, имаме поща! За да прочетете съобщение номер едно, натиснете 1 и след това натиснете Enter.

Получихме имейл от at, защото командите в скрипта генерираха съобщения за грешка. В този пример нямаше файлове за изтриване, защото когато стартирахме скрипта преди това, той ги премахна.

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

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

Имате голяма гъвкавост, когато става въпрос за форматите на времето, с които можете да използвате. Ето няколко примера:

  Как автоматично да синхронизирате файлове между 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

Ан

Заданието се приема и насрочва до в, а номерът на заданието и датата на изпълнение се отчитат точно както преди.

Използване на at с файлове с команди

Можете също да съхраните поредица от команди във файл и след това да я предадете на at. Това може да бъде обикновен текстов файл с команди – не е задължително да е изпълним скрипт.

Можете да използвате опцията -f (файл) по следния начин, за да предадете име на файл на:

at now + 5 minutes -f clean.txt

Ан

Можете да постигнете същия резултат, ако пренасочите файла към:

at now + 5 minutes 

Ан

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 (cat).

Първо, ще използваме atq, за да намерим номера на заданието:

atq

Изход от

Сега ще използваме задача номер 13 с опцията -c:

at -c 13

В

Ето разбивка на информацията, която получаваме за работата:

Първи ред: Това ни казва, че командите ще се изпълняват под обвивката sh.
Втори ред: Виждаме, че командите ще се изпълняват както с потребителски, така и с групов идентификатор 1000. Това са стойностите за човека, който е изпълнил командата at.
Трети ред: Човекът, който получава имейли, отива.
Четвърти ред: The Потребителска маска е 22. Това е маската, използвана за задаване на разрешенията по подразбиране за всички файлове, създадени в тази sh сесия. Маската се изважда от 666, което ни дава 644 (осмичният еквивалент на rw-r--r--).
Оставащи данни: Повечето са променливи на средата.

Изход от

Резултати от тест. Тест проверява дали има достъп до директорията за изпълнение. Ако не може, възниква грешка и изпълнението на заданието се прекратява.
Командите, които трябва да бъдат изпълнени. Те са изброени и се показва съдържанието на планираните скриптове. Имайте предвид, че въпреки че скриптът в нашия пример по-горе е написан да се изпълнява под Bash, той все пак ще се изпълнява в sh shell.

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

Пакетната команда действа по подобен начин към at command, но с три съществени разлики:

Можете да използвате командата batch само интерактивно.
Вместо да планирате задачи за изпълнение в определено време, вие ги добавяте към опашката и пакетната команда ги изпълнява, когато средното натоварване на системата е по-ниско от 1,5.
Поради горното, никога не указвате дата и час с пакетната команда.

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

batch

В

След това добавете задачи точно както бихте направили с командата at.

Контролиране на достъпа до at Command

Файловете at.allow и at.deny контролират кой може да използва семейството команди at. Те се намират в директорията /etc. По подразбиране съществува само файлът at.deny и той се създава, когато at е инсталиран.

Ето как работят тези:

at.deny: Изброява приложения и обекти, които не могат да използват at за планиране на задания.
at.allow: Списъци, които могат да използват at за насрочване на задачи. Ако файлът at.allow не съществува, at използва само файла at.deny.

По подразбиране всеки може да използва at. Ако искате да ограничите кой може да го използва, използвайте файла at.allow, за да изброите тези, които могат. Това е по-лесно от добавянето на всички, които не могат да използват at към файла at.deny.

Ето как изглежда файлът at.deny:

sudo less /etc/at.deny

В

Файлът изброява компоненти на операционната система, които не могат да се използват в. Много от тях са възпрепятствани да направят това от съображения за сигурност, така че не искате да премахвате нито един от файла.

Сега ще редактираме файла at.allow. Ще добавим Дейв и Мери, но никой друг няма да има право да използва в.

Първо, въвеждаме следното:

sudo gedit /etc/at.allow

В

В редактора добавяме двете имена, както е показано по-долу, и след това запазваме файла.

Ако някой друг се опита да използва at, ще му бъде казано, че няма разрешение. Например, да кажем, че потребител на име eric въвежда следното:

at

Ще му бъде отказано, както е показано по-долу.

Отново, eric не е във файла at.deny. Веднага след като поставите когото и да било във файла at.allow, на any- и на всички останали се отказва разрешение за използване на at.

Страхотно за еднократни

Както можете да видите, и at и batch са идеални за задачи, които трябва да изпълните само веднъж. Отново, като бърз преглед:

Когато трябва да направите нещо, което не е редовен процес, насрочете го с at.
Ако искате да стартирате задача само когато натоварването на системата е достатъчно ниско, използвайте пакет.