Mam skrypt, który należy uruchamiać co pięć sekund. Wiem, że cron
potrafię wykonywać zadania z każdą minutą, ale czy istnieje sposób na uruchomienie czegoś co sekundę?
sleep 5
zatrzymuje się (być może w pętli) na 5 sekund) ...?
Mam skrypt, który należy uruchamiać co pięć sekund. Wiem, że cron
potrafię wykonywać zadania z każdą minutą, ale czy istnieje sposób na uruchomienie czegoś co sekundę?
sleep 5
zatrzymuje się (być może w pętli) na 5 sekund) ...?
Odpowiedzi:
Cron pozwala na minimum jedną minutę. Co mógł zrobić, to napisać skrypt z nieskończoną pętlę, która prowadzi swoje zadanie, a potem śpi do 5 sekund. W ten sposób zadanie będzie uruchamiane mniej więcej co 5 sekund, w zależności od tego, jak długo zajmuje samo zadanie.
#!/bin/bash
while true; do
# Do something
sleep 5;
done
Możesz utworzyć my-task.sh
plik z powyższą zawartością i uruchomić go sh my-task.sh
. Opcjonalnie możesz skonfigurować go supervisor
jako usługę, aby uruchamiał się po uruchomieniu systemu itp.
To naprawdę brzmi, jakbyś robił coś, czego prawdopodobnie nie powinieneś robić. To źle .
cron
Co minutę możesz uruchomić skrypt uruchamiający 12 procesów w tle:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
Moje pytanie brzmi jednak: co możesz robić na ZIEMI , który musi działać co 5 sekund?
/media
katalog w poszukiwaniu dysku, który podłączam do USB w celu automatycznego tworzenia kopii zapasowych ...
What on EARTH
- statystyki, wyrzucanie elementów bezużytecznych, synchronizacja plików, status online, nazwij go.
Wystarczy użyć pętli:
while true ; do ./your-script & sleep 5; done
Spowoduje to uruchomienie skryptu jako zadania w tle, uśpienie przez 5 sekund, a następnie powtórzenie pętli. Możesz użyć Ctrl-C, aby go przerwać, lub użyć dowolnego innego warunku zamiast true
, np. ! test -f /tmp/stop-my-script
Aby zapętlić tylko, gdy plik /tmp/stop-my-script
nie istnieje.
bash: syntax error near unexpected token ';'
go wyjąłem. Mam bash 4.3.11. Moje polecenie działa szybko, więc jest w porządku, jeśli działa na pierwszym planie.
./your-script
biec w tle (podczas 5-sekundowego snu), możesz zatrzymać, &
ale upuścić ;
. Ponieważ &
służy do rozdzielania poleceń, nie jest konieczne (i najwyraźniej niedozwolone) umieszczanie ;
po nim w tej samej linii. Innym sposobem jest zapisanie pętli w wielu liniach (z łamaniem linii po &
i, opcjonalnie, łamaniem linii do
również przed i przed done
). Ponieważ ;
po &
wydaje się literówka, usunąłem go. blueyed: Prosimy o odłożenie ;
pleców, jeśli naprawdę tego chcesz; jeśli tak, proponuję również dodać wyjaśnienie.
Możesz użyć pakietu GNU mcron , alternatywy „Vixie cron”.
http://www.gnu.org/software/mcron/manual/mcron.html#Top
„Z łatwością pozwala na określenie dokładniejszych punktów czasowych, tj. Sekund. Zasadniczo można to rozszerzyć na mikrosekundy, ale nie jest to realizowane”.
mcron
wymaga sendmail
domyślnej instalacji i aktywacji. jak to wyłączyć?
Minimalna konfiguracja w cron to minuty, nie można jej ustawić na 5 sekund. Możesz użyć kwarcu, który pozwala na sekundy. http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
Używaj kaktusów do monitorowania routera i przełącznika, ale Cron pozwala tylko na co najmniej jedną minutę, więc jeśli jeden port / urządzenie nie działa, nie ma ostrzeżenia przed upływem dwóch minut.
Możesz użyć jednostki czasowej SystemD, która uruchomi usługę - skonfigurowaną do robienia tego, co chcesz - co 5 sekund.
Załóżmy, że twoja jednostka serwisowa została wywołana mystuff.service
i jest zainstalowana w /etc/systemd/system
(sprawdź usługi użytkownika SystemD, jeśli chcesz zastąpić crontab użytkownika), wtedy możesz napisać jednostkę czasową do uruchomienia usługi w czasie uruchamiania, a następnie co 5 sekund, w ten sposób:
/etc/systemd/system/mystuff.timer
[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
Następnie ponownie załaduj konfigurację systemową, włącz jednostkę czasową i uruchom ją.
Zrobiłem to bardzo skutecznie (a wynik końcowy pada tygodniami, aż do ponownego uruchomienia komputera). Jeśli chodzi o to, co robiłem teraz, aktualizuję informacje i umieszczam je w pamięci podręcznej - aktualizuję co 10 sekund.
#!/bin/sh
SLEEP=5
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# do stuff
sleep $SLEEP
# echo and restart...
exec $0
„Exec $ 0” ponownie uruchamia skrypt, ale zastępuje działający skrypt. Można go początkowo uruchomić za pomocą wiersza crontab „@reboot”.
while
pętli zamiast wielokrotnie restartować skrypt?