Wyszukiwanie w witrynie

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:

  1. -b – generuje sygnał dźwiękowy, jeśli wyjście polecenia jest niezerowe.
  2. -c – interpretuje sekwencje kolorów ANSI.
  3. -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:

  1. Użyj cron, jeśli chcesz okresowo uruchamiać polecenia, nawet po ponownym uruchomieniu systemu.
  2. 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.