Jak uruchamiać lub powtarzać polecenie systemu Linux co X sekund na zawsze
Administrator systemu często musi uruchamiać polecenie wielokrotnie w określonych odstępach czasu. Często takie zadania można łatwo wykonać za pomocą prostych poleceń cron. W większości przypadków powinno to zadziałać, ale najkrótszy czas, w którym można uruchomić polecenie cron, to co 1 minuta. Wierzcie lub nie, ale w wielu przypadkach jest to zbyt powolne.
W tym samouczku nauczysz się prostych technik skryptowych pozwalających monitorować lub mieć oko na określone polecenie w stanie ciągłego działania, podobnym do najwyższego polecenia (ciągle monitoruj proces i wykorzystanie pamięci) domyślnie co 3 sekundy.
Nie zatrzymamy się, aby omówić powody, dla których musisz tak często uruchamiać polecenia. Wierzę, że każdy ma ku temu różne powody w codziennej pracy, a nawet w domu na komputerze stacjonarnym i laptopie.
1. Użyj polecenia zegarka
Watch to polecenie systemu Linux, które umożliwia okresowe wykonywanie polecenia lub programu, a także wyświetla wyniki na ekranie. Oznacza to, że będziesz mógł zobaczyć wynik programu na czas. Domyślnie zegarek ponownie uruchamia polecenie/program co 2 sekundy. Interwał można łatwo zmienić, aby spełnić Twoje wymagania.
Monitoruj użycie pamięci
„Watch” jest niezwykle łatwy w użyciu, aby go przetestować, możesz od razu uruchomić terminal Linux i wpisać następującą komendę:
watch free -m
Powyższe polecenie sprawdzi wolną pamięć systemową i zaktualizuje wyniki darmowego polecenia co dwie sekundy.
Jak widać z powyższych danych wyjściowych, masz nagłówek wyświetlający informacje o interwale aktualizacji (od lewej do prawej), wykonywanym poleceniu i bieżącym czasie. Jeśli chcesz ukryć ten nagłówek, możesz użyć opcji -t
.
Kolejnym logicznym pytaniem jest – jak zmienić interwał wykonania. W tym celu można skorzystać z opcji -n
, która określa częstotliwość wykonywania polecenia. Ten odstęp jest podawany w sekundach. Powiedzmy, że chcesz uruchamiać plik script.sh
co 10 sekund, możesz to zrobić w ten sposób:
watch -n 10 script.sh
Pamiętaj, że jeśli uruchomisz polecenie jak pokazano powyżej, będziesz musiał cd
przejść do katalogu (dowiedz się 15 przykładów poleceń cd), w którym znajduje się skrypt lub w inny sposób podaj pełną ścieżkę do tego skryptu.
Inne przydatne opcje polecenia Watch to:
-b
– generuje sygnał dźwiękowy, jeśli wyjście polecenia jest niezerowe.-c
– interpretuje sekwencje kolorów ANSI.-d
– podświetla zmiany w wynikach polecenia.
Monitoruj zalogowanych użytkowników, czas pracy i średnie obciążenie
Załóżmy, że chcesz monitorować zalogowanych użytkowników, czas pracy serwera i średnią moc wyjściową ładowania w sposób ciągły co kilka sekund, a następnie użyj następującego polecenia, jak pokazano:
watch uptime
Aby zakończyć polecenie, naciśnij CTRL+C
.
W tym przypadku polecenie 'uptime'
zostanie uruchomione i domyślnie wyświetli zaktualizowane wyniki co 2 sekundy.
Monitoruj postęp polecenia kopiowania
W systemie Linux podczas kopiowania plików z jednej lokalizacji do drugiej za pomocą polecenia cp
postęp danych nie jest pokazywany, aby zobaczyć postęp kopiowania danych, możesz użyć funkcji watch
polecenie wraz z poleceniem du -s, aby sprawdzić użycie dysku w czasie rzeczywistym.
cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso
Jeśli uważasz, że powyższy proces jest zbyt skomplikowany do osiągnięcia, sugeruję skorzystanie z polecenia Advance copy, które pokazuje postęp danych podczas kopiowania.
2. Użyj polecenia uśpienia
Sleep jest często używany do debugowania skryptów powłoki, ale ma także wiele innych przydatnych celów. Na przykład w połączeniu z pętlami for
lub while
można uzyskać naprawdę niesamowite rezultaty.
Jeśli nie masz doświadczenia w pisaniu skryptów bash, możesz zapoznać się z naszym przewodnikiem na temat pętli bash tutaj.
Jeśli po raz pierwszy słyszysz o poleceniu „uśpienie”
, służy ono do opóźnienia czegoś o określony czas. W skryptach możesz go użyć, aby poinformować skrypt, aby uruchomił polecenie 1, poczekał 10 sekund, a następnie uruchomił polecenie 2.
Dzięki powyższym pętlom możesz nakazać bashowi wykonanie polecenia, uśpienie na N liczbę sekund, a następnie ponowne uruchomienie polecenia.
Poniżej możesz zobaczyć przykłady obu pętli:
for pętla Przykład
for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done
Powyższa linijka uruchomi polecenie echo i wyświetli bieżącą datę, w sumie 10 razy, z 5-sekundowym uśpieniem pomiędzy wykonaniami.
Oto przykładowe dane wyjściowe:
This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016
Możesz zmieniać polecenia echo i date za pomocą własnych poleceń lub skryptu i zmieniać interwał snu zgodnie ze swoimi potrzebami.
pętla while Przykład
while true; do echo -n "This is a test of while loop";date ; sleep 5; done
Oto przykładowe dane wyjściowe:
This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016
Powyższe polecenie będzie wykonywane do momentu jego zakończenia lub przerwania przez użytkownika. Może się przydać, jeśli chcesz uruchomić polecenie działające w tle i nie chcesz liczyć na cron.
Ważne: podczas korzystania z powyższych metod zdecydowanie zaleca się ustawienie interwału na tyle długiego, aby zapewnić wystarczającą ilość czasu na zakończenie działania polecenia przed kolejnym wykonaniem.
Wniosek
Przykłady zawarte w tym samouczku są przydatne, ale nie mają na celu całkowitego zastąpienia narzędzia cron. Od Ciebie zależy, która z nich będzie dla Ciebie lepsza, ale jeśli musielibyśmy rozdzielić użycie obu technik, powiedziałbym tak:
- Użyj cron, jeśli chcesz okresowo uruchamiać polecenia, nawet po ponownym uruchomieniu systemu.
- Użyj metod wyjaśnionych w tym samouczku w przypadku programów/skryptów, które mają być uruchamiane w ramach bieżącej sesji użytkownika.
Jak zawsze, jeśli masz jakieś pytania lub uwagi, nie wahaj się przesłać ich w sekcji komentarzy poniżej.