Könnten Sie mir raten, was ich schreiben soll crontab, damit /usr/bin/chromium-browseralle 15 Sekunden ein Auftrag ausgeführt wird (zum Testen, den ich verwenden werde )?
Mit cron können Sie die Granularität von einer Minute nicht unterschreiten. Sie können jede Minute ein Skript ausführen, das Ihren Job ausführt, 15 Sekunden wartet und die Ausführung wiederholt. Die folgende Crontab-Linie startet some_joballe 15 Sekunden.
* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
In diesem Skript wird davon ausgegangen, dass der Auftrag nie länger als 15 Sekunden dauert. Das folgende etwas komplexere Skript sorgt dafür, dass die nächste Instanz nicht ausgeführt wird, wenn die Ausführung zu lange gedauert hat. Es hängt von der dateUnterstützung des %sFormats ab (z. B. GNU oder Busybox, damit Sie unter Linux in Ordnung sind). Wenn Sie es direkt in eine Crontab einfügen, beachten Sie, dass %Zeichen wie \%in einer Crontab-Zeile geschrieben werden müssen.
Ich werde jedoch bemerken, dass cron wahrscheinlich der falsche Ansatz ist, wenn Sie einen Job alle 15 Sekunden ausführen müssen. Obwohl Unices mit kurzlebigen Prozessen gut umgehen können, kann der Aufwand für das Starten eines Programms alle 15 Sekunden nicht vernachlässigbar sein (je nachdem, wie anspruchsvoll das Programm ist). Können Sie Ihre Anwendung nicht ständig ausführen und alle 15 Sekunden ausführen lassen?
könnte auch sein: für i in 1 2 3 4 ; do some_job & sleep 15; done(der letzte Schlaf wirkt sich nicht auf den nächsten Lauf aus), aber die Art und Weise, wie Sie dies tun, ist wahrscheinlich besser für das Timing der ausgehenden Cronjob-Mail (direkt nach dem letzten some_job gesendet, intead von 15s später in meine Variante)
Um zu verhindern, dass der Job sich selbst stört, begrenzen wir seine Laufzeit über GNU coreutils ' timeoutfür jeden Job auf 15 Sekunden . Beachten Sie jedoch, dass Sie möglicherweise immer noch Probleme haben, wenn der Job nach Ablauf von 15 Sekunden nicht ordnungsgemäß beendet wird. Einzelheiten zur Behebung eines Problems finden Sie im Befehlshandbuch. Beachten Sie auch, dass Sie, wenn der Befehl länger als 15 Sekunden dauert und das Timeout ihn beendet, einen Beendigungsstatus ungleich Null erhalten, der eine Cronjob-E-Mail auslöst.
Nett. Wenn ein Prozess lange läuft, würde der nächste wahrscheinlich auch auf einem anderen Kern enden. Wir sind uns nicht sicher, ob Sie die Kernaffinität für Cron-Jobs gezielt festlegen können, aber dies könnte diesen Ansatz noch verbessern.
Tim
@ Tim guter Punkt. Ich habe das etwas in einer Bearbeitung angesprochen.
Otheus
2
Kurz gesagt, Cron ist mit der Zeit nicht so körnig. Die kürzeste Zeit, die Sie bekommen, ist 1 Minute.
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .----- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
* * * * /usr/bin/chromium-browser
Sie könnten jedoch ein Skript schreiben, das alle 15 Sekunden ausgeführt wird ...
Ich habe eine Zeile * * * * * /usr/bin/chromium-browserin Crontab. Laut Handbuch sollte es jede Minute laufen, aber es läuft nichts.
Xralf
Ist es schwierig, ein solches Skript zu schreiben? Soll ich eine andere Frage stellen oder könnte sie hier geschrieben werden?
Xralf
Cron-Jobs haben kein Terminal, daher würde ich davon ausgehen, dass der Browser ausfällt. Es kann so leise tun.
BillThor
Meine Cron-Protokolle befinden sich in / var / log / cron für Derivate von RedHat, dh. fedora, centos etc. Es kann auch hilfreich sein, genau zu beschreiben, was Sie versuchen, damit die Leute ein vollständiges Bild davon haben, was los ist.
Rfelsburg
1
In Ihrer Crontab:
* * * * /usr/bin/chromium-browser_starter
Dann in /usr/bin/chromium-browser_starter:
#!/bin/sh
# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).
for ((secs=0; secs<46; secs+=15)); do
(sleep $secs; /usr/bin/chromium-browser "$@") &
done
wait
Antworten:
Mit cron können Sie die Granularität von einer Minute nicht unterschreiten. Sie können jede Minute ein Skript ausführen, das Ihren Job ausführt, 15 Sekunden wartet und die Ausführung wiederholt. Die folgende Crontab-Linie startet
some_job
alle 15 Sekunden.In diesem Skript wird davon ausgegangen, dass der Auftrag nie länger als 15 Sekunden dauert. Das folgende etwas komplexere Skript sorgt dafür, dass die nächste Instanz nicht ausgeführt wird, wenn die Ausführung zu lange gedauert hat. Es hängt von der
date
Unterstützung des%s
Formats ab (z. B. GNU oder Busybox, damit Sie unter Linux in Ordnung sind). Wenn Sie es direkt in eine Crontab einfügen, beachten Sie, dass%
Zeichen wie\%
in einer Crontab-Zeile geschrieben werden müssen.Ich werde jedoch bemerken, dass cron wahrscheinlich der falsche Ansatz ist, wenn Sie einen Job alle 15 Sekunden ausführen müssen. Obwohl Unices mit kurzlebigen Prozessen gut umgehen können, kann der Aufwand für das Starten eines Programms alle 15 Sekunden nicht vernachlässigbar sein (je nachdem, wie anspruchsvoll das Programm ist). Können Sie Ihre Anwendung nicht ständig ausführen und alle 15 Sekunden ausführen lassen?
quelle
1 2 3 4 ; do some_job & sleep 15; done
(der letzte Schlaf wirkt sich nicht auf den nächsten Lauf aus), aber die Art und Weise, wie Sie dies tun, ist wahrscheinlich besser für das Timing der ausgehenden Cronjob-Mail (direkt nach dem letzten some_job gesendet, intead von 15s später in meine Variante)Anderer Ansatz als die anderen: Führen Sie 4 Cronjobs aus, die jeweils um 15 Sekunden versetzt sind:
Um zu verhindern, dass der Job sich selbst stört, begrenzen wir seine Laufzeit über GNU coreutils '
timeout
für jeden Job auf 15 Sekunden . Beachten Sie jedoch, dass Sie möglicherweise immer noch Probleme haben, wenn der Job nach Ablauf von 15 Sekunden nicht ordnungsgemäß beendet wird. Einzelheiten zur Behebung eines Problems finden Sie im Befehlshandbuch. Beachten Sie auch, dass Sie, wenn der Befehl länger als 15 Sekunden dauert und das Timeout ihn beendet, einen Beendigungsstatus ungleich Null erhalten, der eine Cronjob-E-Mail auslöst.quelle
Kurz gesagt, Cron ist mit der Zeit nicht so körnig. Die kürzeste Zeit, die Sie bekommen, ist 1 Minute.
Sie könnten jedoch ein Skript schreiben, das alle 15 Sekunden ausgeführt wird ...
quelle
* * * * * /usr/bin/chromium-browser
in Crontab. Laut Handbuch sollte es jede Minute laufen, aber es läuft nichts.In Ihrer Crontab:
Dann in
/usr/bin/chromium-browser_starter
:quelle
ps aux | grep chrom
nach einer Minute schreibe, sehe ich keinen laufenden Chrom-Browser.sleep
.