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.
Spis treści:
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
Po zakończeniu instalacji możesz uruchomić demona at za pomocą tego polecenia:
sudo systemctl enable --now atd.service
Na Manjaro instalujesz w tym poleceniem:
sudo pacman -Sy at
Po zakończeniu instalacji wpisz to polecenie, aby uruchomić demona at:
sudo systemctl enable --now atd.service
W dowolnej dystrybucji możesz wpisać to polecenie, aby upewnić się, że demon atd jest uruchomiony:
ps -e | grep atd
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
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
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:
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
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.
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
Po wykonaniu zadania wpisz następujące informacje, aby sprawdzić swoją pocztę wewnętrzną:
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
Po minucie wpisz następujące informacje, aby ponownie sprawdzić pocztę:
Hej, mamy wiadomość! Aby przeczytać wiadomość numer jeden, naciśnij 1, a następnie naciśnij Enter.
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.
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
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
Możesz osiągnąć ten sam wynik, jeśli przekierujesz plik pod adres:
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:
atqatrm 11atq
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
Teraz użyjemy zadania numer 13 z opcją -c:
at -c 13
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.
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
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 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.
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
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:
atOdmó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.