Mam skrypt, który należy uruchamiać co pięć sekund. Wiem, że cronpotrafię wykonywać zadania z każdą minutą, ale czy istnieje sposób na uruchomienie czegoś co sekundę?
sleep 5zatrzymuje się (być może w pętli) na 5 sekund) ...?
Mam skrypt, który należy uruchamiać co pięć sekund. Wiem, że cronpotrafię wykonywać zadania z każdą minutą, ale czy istnieje sposób na uruchomienie czegoś co sekundę?
sleep 5zatrzymuje 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.shplik z powyższą zawartością i uruchomić go sh my-task.sh. Opcjonalnie możesz skonfigurować go supervisorjako usługę, aby uruchamiał się po uruchomieniu systemu itp.
To naprawdę brzmi, jakbyś robił coś, czego prawdopodobnie nie powinieneś robić. To źle .
cronCo 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?
/mediakatalog 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-scriptAby zapętlić tylko, gdy plik /tmp/stop-my-scriptnie 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-scriptbiec 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 doró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”.
mcronwymaga sendmaildomyś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.servicei 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”.
whilepętli zamiast wielokrotnie restartować skrypt?