Jak używać at i batch w systemie Linux do planowania poleceń

Jeśli chcesz zaplanować zadanie w Linuksie, które nastąpi tylko raz, cron jest przesadą. Rodzina poleceń at jest tym, czego potrzebujesz! A jeśli chcesz uruchamiać procesy tylko wtedy, gdy Twój system ma wolne zasoby, możesz użyć wsadowego.

Jak zaplanować zadania w systemie Linux

Demon cron utrzymuje lista zadań wykonywanych w określonych godzinach. Te zadania i programy działają w tle w zaplanowanych godzinach. Zapewnia to dużą elastyczność planowania zadań, które należy powtórzyć. Niezależnie od tego, czy chcesz uruchamiać zadanie co godzinę, o określonej porze każdego dnia, czy raz w miesiącu lub roku, możesz je skonfigurować w programie cron.

Jednak to nie pomaga, jeśli chcesz zaplanować wykonanie zadania tylko raz. Jasne, możesz ustawić go w cron, ale wtedy musisz pamiętać, aby wrócić i usunąć plik wpis crontab po wykonaniu zadania, co jest niewygodne.

W Linuksie, jeśli zmagasz się z problemem, jest to prawie gwarancja, że ​​ktoś inny też się z nim zmagał. Na szczęście, ponieważ systemy operacyjne podobne do Uniksa istnieją od tak dawna, istnieje również duża szansa, że ​​ktoś stworzył rozwiązanie Twojego problemu.

W przypadku problemu opisanego powyżej mają i to się nazywa.

Instalowanie at Command

Musieliśmy zainstalować na Ubuntu 18.04 i Manjaro 18.1.0 (był już zainstalowany w Fedorze 31).

Aby zainstalować na Ubuntu, użyj tego polecenia:

sudo apt-get install at

Plik

Po zakończeniu instalacji możesz uruchomić demona at za pomocą tego polecenia:

sudo systemctl enable --now atd.service

Plik

Na Manjaro instalujesz w tym poleceniem:

sudo pacman -Sy at

Plik

Po zakończeniu instalacji wpisz to polecenie, aby uruchomić demona at:

sudo systemctl enable --now atd.service

Plik

W dowolnej dystrybucji możesz wpisać to polecenie, aby upewnić się, że demon atd jest uruchomiony:

ps -e | grep atd

Plik

Jak interaktywnie korzystać z polecenia at

Aby użyć w, musisz przypisać mu datę i godzinę uruchomienia. Istnieje duża elastyczność w sposobie ich pisania, co omówimy w dalszej części tego artykułu.

Jednak nawet jeśli zamierzamy używać at interaktywnie, musisz podać datę i godzinę z góry. Jeśli nie podasz niczego w wierszu poleceń lub wpiszesz coś, co nie jest datą i godziną, at odpowie „Zniekształcony czas”, jak pokazano poniżej:

at
at banana

Nieprawidłowe użycie rozszerzenia

Daty i godziny mogą być wyraźne lub względne. Na przykład, powiedzmy, że chcesz, aby polecenie było wykonywane za minutę. wie, co oznacza „teraz”, więc możesz użyć teraz i dodać do tego jedną minutę, na przykład:

at now + 1 minute

Plik

at wyświetla komunikat i znak zachęty i czeka, aż wpiszesz polecenia, które chcesz zaplanować. Najpierw jednak rozważ wiadomość, jak pokazano poniżej:

Plik

Mówi ci o uruchomieniu instancji powłoki sh i woli uruchom polecenia wewnątrz tego. Twoje polecenia nie będą wykonywane w powłoce Bash, która jest kompatybilna z powłoką sh, ale ma bogatszy zestaw funkcji.

Jeśli twoje polecenia lub skrypty spróbują użyć funkcji lub ułatwienia, które zapewnia Bash, ale sh tego nie zrobi, zawiodą.

Łatwo jest sprawdzić, czy Twoje polecenia lub skrypty będą działać w sh. Użyj polecenia sh, aby uruchomić powłokę sh:

sh

Plik

Wiersz polecenia zmieni się na znak dolara ($) i możesz teraz uruchamiać polecenia i sprawdzać, czy działają poprawnie.

Aby powrócić do powłoki Bash, wpisz polecenie exit:

exit

Nie zobaczysz żadnych standardowych danych wyjściowych ani komunikatów o błędach z poleceń. Dzieje się tak, ponieważ powłoka sh jest uruchamiana jako zadanie w tle i działa bez żadnego interfejsu ekranowego.

Wszelkie wyniki poleceń – dobre lub złe – są wysyłane do Ciebie e-mailem. Jest wysyłany za pośrednictwem wewnętrznego systemu pocztowego do każdego, kto uruchamia komendę. Oznacza to, że musisz skonfigurować i skonfigurować ten wewnętrzny system poczty elektronicznej.

Wiele (większość) systemów Linux nie ma wewnętrznego systemu poczty e-mail, ponieważ rzadko jest potrzebny. Te, które zwykle używają systemu takiego jak Wyślij maila lub przyrostek. Jeśli Twój system nie ma wewnętrznego systemu poczty e-mail, możesz mieć skrypty zapisujące do plików lub przekierowujące dane wyjściowe do plików, aby dodać rejestrowanie.

Jeśli polecenie nie wygeneruje żadnych standardowych danych wyjściowych ani komunikatów o błędach, i tak nie otrzymasz e-maila. Wiele poleceń Linuksa wskazuje sukces poprzez ciszę, więc w większości przypadków nie otrzymasz e-maila.

Teraz nadszedł czas, aby wpisać polecenie w. W tym przykładzie użyjemy małego pliku skryptu o nazwie sweep.sh, który usuwa pliki * .bak, * .tmp i * .o. Wpisz ścieżkę do polecenia, jak pokazano poniżej, a następnie naciśnij klawisz Enter.

Plik

Pojawi się kolejny wiersz polecenia i możesz dodać dowolną liczbę poleceń. Zwykle wygodniej jest mieć polecenia w jednym skrypcie i po prostu wywołać ten skrypt z poziomu at.

Naciśnij Ctrl + D, aby powiedzieć, że zakończyłeś dodawanie poleceń. na wystawach , co znaczy koniec transmisji. Otrzymujesz numer zadania i termin zaplanowania wykonania zadania, jak pokazano poniżej:

Potwierdzenie

Po wykonaniu zadania wpisz następujące informacje, aby sprawdzić swoją pocztę wewnętrzną:

mail

Plik

Jeśli nie ma poczty, musisz zakładać sukces. Oczywiście w takim przypadku możesz sprawdzić i sprawdzić, czy pliki * .bak, * .tmp i * .o zostały usunięte, aby potwierdzić, że polecenie zadziałało.

Wpisz następujące polecenie, aby ponownie uruchomić całość:

at now + 1 minute

Plik

Po minucie wpisz następujące informacje, aby ponownie sprawdzić pocztę:

mail

Plik

Hej, mamy wiadomość! Aby przeczytać wiadomość numer jeden, naciśnij 1, a następnie naciśnij Enter.

Wewnętrzny e-mail w oknie terminala.

Otrzymaliśmy wiadomość e-mail z adresu o godzinie, ponieważ polecenia w skrypcie generowały komunikaty o błędach. W tym przykładzie nie było plików do usunięcia, ponieważ gdy wcześniej uruchomiliśmy skrypt, usunął je.

Naciśnij klawisze D + Enter, aby usunąć wiadomość e-mail, oraz klawisze Q + Enter, aby zamknąć program pocztowy.

Formaty daty i godziny

Masz dużą elastyczność, jeśli chodzi o formaty czasu, których możesz używać w. Oto kilka przykładów:

Uruchom o 11:00:

at 11:00 AM

Uruchom jutro o 11:00:

at 11:00 AM tomorrow

Uruchom o 11:00 tego dnia w przyszłym tygodniu:

at 11:00 AM next week

Uruchom o tej godzinie, w tym dniu, w przyszłym tygodniu:

at next week

Uruchom o 11:00 w następny piątek:

at 11:00 AM next fri

Uruchom o tej godzinie w następny piątek:

at next fri

Uruchom o 11:00 tego dnia w następnym miesiącu:

at 11:00 AM next month

Uruchom o 11:00 w określonym dniu:

at 11:00 AM 3/15/2020

Biegnij za 30 minut od teraz:

at now + 30 minutes

Uruchom za dwie godziny:

at now + 2 hours

Uruchom jutro o tej godzinie:

at tomorrow

Uruchom o tej godzinie w czwartek:

at thursday

Uruchom o 12:00:

at midnight

Uruchom o 12:00:

at noon

Jeśli jesteś Brytyjczykiem, możesz nawet zaplanować polecenie uruchomienia w porze podwieczorku (16:00):

at teatime

Patrząc na kolejkę zadań

Możesz wpisać polecenie atq, aby wyświetlić kolejkę zaplanowanych zadań, jak pokazano poniżej.

Dane wyjściowe z

Dla każdego polecenia w kolejce atq wyświetla następujące informacje:

ID pracy
Zaplanowana data
Zaplanowany czas
Kolejka, w której znajduje się zadanie. Kolejki są oznaczone „a”, „b” i tak dalej. Normalne zadania, które planujesz w, trafiają do kolejki „a”, podczas gdy zadania, które planujesz za pomocą partii (omówione w dalszej części tego artykułu) trafiają do kolejki „b”.
Osoba, która zaplanowała pracę.

Używanie at w wierszu poleceń

Nie musisz używać at interaktywnie; możesz go również użyć w poleceniu. Ułatwia to używanie wewnątrz skryptów.

Możesz potokować polecenia do at, na przykład:

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

Na

Zadanie zostanie zaakceptowane i zaplanowane do o, a numer zadania i data wykonania są raportowane tak jak poprzednio.

Używanie at z plikami poleceń

Możesz także zapisać sekwencję poleceń w pliku, a następnie przekazać ją do at. Może to być zwykły plik tekstowy z poleceniami – nie musi to być wykonywalny skrypt.

Możesz użyć opcji -f (plik) w następujący sposób, aby przekazać nazwę pliku do at:

at now + 5 minutes -f clean.txt

Na

Możesz osiągnąć ten sam wynik, jeśli przekierujesz plik pod adres:

at now + 5 minutes 

Na

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

Usuwanie zadania 11 z kolejki at w oknie terminala.

Jak wyświetlić szczegółowy widok ofert pracy

Jak wspomnieliśmy wcześniej, możesz planować zadania w dalekiej przyszłości. Czasami możesz zapomnieć, co przyniesie praca. Komenda atq pokazuje zadania w kolejce, ale nie pokazuje, co zamierzają zrobić. Jeśli chcesz zobaczyć szczegółowy widok oferty pracy, możesz użyć opcji -c (cat).

Najpierw użyjemy atq, aby znaleźć numer pracy:

atq

Dane wyjściowe z

Teraz użyjemy zadania numer 13 z opcją -c:

at -c 13

Plik

Oto zestawienie informacji, które otrzymujemy na temat pracy:

Pierwsza linia: To mówi nam, że polecenia będą działały pod powłoką sh.
Drugi wiersz: Widzimy, że polecenia będą działać z identyfikatorem użytkownika i grupy równym 1000. Są to wartości dla osoby, która uruchomiła polecenie at.
Trzecia linia: osoba, która otrzymuje e-maile na koniec.
Czwarta linia: Maska użytkownika to 22. Jest to maska ​​używana do ustawiania domyślnych uprawnień dla wszystkich plików utworzonych w tej sesji sh. Maskę odejmuje się od 666, co daje nam 644 (ósemkowy odpowiednik rw-r - r--).
Pozostałe dane: większość to zmienne środowiskowe.

Dane wyjściowe z

Wyniki testu. Test sprawdza, czy można uzyskać dostęp do katalogu wykonawczego. Jeśli nie może, zgłaszany jest błąd i wykonywanie zadania jest przerywane.
Polecenia do wykonania. Są one wymienione i wyświetlana jest zawartość zaplanowanych skryptów. Zwróć uwagę, że chociaż skrypt w naszym przykładzie powyżej został napisany do uruchamiania pod Bash, nadal będzie wykonywany w powłoce sh.

Polecenie wsadowe

Polecenie wsadowe działa podobnie do dowódcy, ale z trzema istotnymi różnicami:

Polecenia wsad można używać tylko w trybie interaktywnym.
Zamiast planować wykonanie zadań w określonym czasie, dodajesz je do kolejki, a polecenie wsadowe wykonuje je, gdy średnie obciążenie systemu jest mniejsze niż 1,5.
Z tego powodu nigdy nie określasz daty i godziny za pomocą polecenia wsadowego.

Kiedy używasz polecenia batch, wywołujesz je po nazwie bez parametrów wiersza poleceń, takich jak:

batch

Plik

Następnie dodaj zadania tak samo, jak w przypadku polecenia at.

Kontrolowanie dostępu do polecenia at

Pliki at.allow i at.deny określają, kto może używać rodziny poleceń at. Znajdują się one w katalogu / etc. Domyślnie istnieje tylko plik at.deny, który jest tworzony podczas instalacji at.

Oto jak to działa:

at.deny: Zawiera listę aplikacji i jednostek, których nie można używać do planowania zadań.
at.allow: listy osób, które mogą używać at do planowania zadań. Jeśli plik at.allow nie istnieje, at używa tylko pliku at.deny.

Domyślnie każdy może korzystać z domeny. Jeśli chcesz ograniczyć, kto może z niego korzystać, użyj pliku at.allow, aby wyświetlić listę tych, którzy mogą. Jest to łatwiejsze niż dodanie wszystkich, którzy nie mogą używać at, do pliku at.deny.

Oto jak wygląda plik at.deny:

sudo less /etc/at.deny

Plik

Plik zawiera listę składników systemu operacyjnego, których nie można używać w. Wiele z nich jest zablokowanych ze względów bezpieczeństwa, więc nie chcesz ich usuwać z pliku.

Zawartość pliku at.deny w oknie terminala.

Teraz zmodyfikujemy plik at.allow. Dodamy dave i mary, ale nikt inny nie będzie mógł używać at.

Najpierw wpisujemy:

sudo gedit /etc/at.allow

Plik

W edytorze dodajemy dwie nazwy, jak pokazano poniżej, a następnie zapisujemy plik.

Jeśli ktoś inny spróbuje użyć at, zostanie poinformowany, że nie ma pozwolenia. Na przykład, powiedzmy, że użytkownik o imieniu eric wpisuje następujące polecenie:

at

Odmówiono mu, jak pokazano poniżej.

Ponownie, erica nie ma w pliku at.deny. Jak tylko umieścisz kogokolwiek w pliku at.allow, wszyscy - i wszyscy inni nie otrzymają pozwolenia na używanie at.

Idealne dla jednorazowych

Jak widać, zarówno at, jak i batch są idealne do zadań, które wystarczy uruchomić tylko raz. Ponownie, jako krótka recenzja:

Kiedy musisz zrobić coś, co nie jest zwykłym procesem, zaplanuj to na.
Jeśli chcesz uruchomić zadanie tylko wtedy, gdy obciążenie systemu jest wystarczająco niskie, użyj wsadowego.