Czy w wierszu poleceń systemu Linux można powtarzać polecenie co n sekund?
Powiedzmy, że mam importowanie i robię
ls -l
aby sprawdzić, czy rozmiar pliku rośnie. Chciałbym mieć polecenie automatycznego powtórzenia tego.
Oglądaj co 5 sekund ...
watch -n 5 ls -l
Jeśli chcesz mieć wizualne potwierdzenie zmian, dołącz --differences
przed ls
poleceniem.
Według strony podręcznika OSX jest też
Opcja --cumulative sprawia, że podświetlanie jest „lepkie”, co pokazuje bieżące wyświetlanie wszystkich pozycji, które kiedykolwiek się zmieniły. Opcja -t lub --no-title wyłącza nagłówek pokazujący interwał, polecenie i aktualny czas w górnej części wyświetlacza, a także następujący pusty wiersz.
Strona podręcznika Linux / Unix można znaleźć tutaj
watch mysql dbname -e \"show processlist\;\"
brew install watch
źródło
watch
ma również niefortunny efekt uboczny czyszczenia ekranu, więc czasami pętla jest przydatna. Które użyć zależy od pożądanego formatu danych wyjściowych.--differences
aby je podświetlić (Jeśliwatch
. Watch nie działa na przykład, gdy chcesz wygenerować losową liczbę przy każdym wywołaniu, npwatch -n 1 echo ${RANDOM}
. Losowy zostanie wywołany tylko raz.„watch” nie pozwala ułamkom sekund na Busybox, podczas gdy „sleep” tak. Jeśli to dla Ciebie ważne, spróbuj tego:
źródło
sleep
już powraca0
. Jako taki używam:To jest trochę krótsze niż rozwiązanie Michaiła. Niewielką wadą jest to, że śpi przed uruchomieniem polecenia docelowego po raz pierwszy.
źródło
Jeśli polecenie zawiera niektóre znaki specjalne, takie jak potoki i cudzysłowy, należy je uzupełnić cudzysłowami. Na przykład, aby powtórzyć
ls -l | grep "txt"
, polecenie watch powinno być:watch -n 5 'ls -l | grep "txt"'
źródło
Uruchamianie poleceń okresowo bez crona jest możliwe, gdy zaczynamy
while
.Jako polecenie:
Przykład:
Nie zapomnij ostatniego,
&
ponieważ spowoduje to umieszczenie pętli w tle. Ale musisz znaleźć identyfikator procesu za pomocą polecenia „ps -ef | grep your_script”, a następnie musisz go zabić. Dlatego uprzejmie dodaj znak „&” podczas uruchamiania skryptu.Oto ta sama pętla co skrypt. Utwórz plik „while_check.sh” i umieść w nim:
Następnie uruchom go, wpisując
bash ./while_check.sh &
źródło
echo $!
po każdym uruchomieniu procesu w tle - jest to PID ostatniego procesu potomnego uruchomionego w tle.echo `date`
jest po prostu kiepskim i nieco błędnym sposobem pisaniadate
. (Błąd ma związek z brakiem cytowania argumentuecho
.) Zobacz także bezużyteczne użycieecho
.zegarek jest dobry, ale wyczyści ekran.
źródło
Jeśli chcesz uniknąć „dryfowania”, co oznacza, że chcesz, aby polecenie było wykonywane co N sekund, niezależnie od tego, jak długo trwa to polecenie (zakładając, że zajmuje mniej niż N sekund), oto kilka słów kluczowych, które będą powtarzać polecenie co 5 sekund z jednym- druga dokładność (i wydrukuje ostrzeżenie, jeśli nie będzie w stanie nadążyć):
Może nadal nieco dryfować, ponieważ sen jest dokładny tylko do jednej sekundy. Możesz poprawić tę dokładność, twórczo wykorzystując polecenie daty.
źródło
Jeśli chcesz zrobić coś określoną liczbę razy, zawsze możesz to zrobić:
źródło
for x in {1..300} ; do
polecenia||break;sleep 1.5; done
Możesz uruchomić następujące i filtrować tylko rozmiar. Jeśli plik został wywołany
somefilename
, możesz wykonać następujące czynnościwhile :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
Jeden z wielu pomysłów.
źródło
Aby łatwiej zminimalizować dryf, użyj:
nadal będzie niewielki dryf z powodu czasu basha na uruchomienie struktury pętli i polecenia uśpienia, aby faktycznie wykonać.
wskazówka: „:” zmienia się na 0, tzn. prawda.
źródło
Uruchamia
ls -l
polecenie po każdych 5 sekundachWynik :-
źródło
Zwięzłe rozwiązanie, które jest szczególnie przydatne, jeśli chcesz wielokrotnie uruchamiać polecenie, dopóki się nie powiedzie, i pozwala zobaczyć wszystkie dane wyjściowe.
źródło