Wie kann verhindert werden, dass atd an Jobs vorbei läuft?

9

Der at Daemon ist ein großartiges Tool! Wenn jedoch ein Job für 8:00 Uhr geplant ist und der Computer zu diesem Zeitpunkt ausgeschaltet ist, wird der Job bei jedem Start des Computers um ausgeführt. Was ich tun möchte, ist zu verhindern, dass der Job ausgeführt wird, wenn die Zeit abgelaufen ist. Ich habe die Manpages und online durchsucht, aber entweder gibt es keine Antwort oder ich konnte keine finden. Ich benutze Arch, aber soweit ich weiß, ist es über Distributionen hinweg sehr ähnlich.

Jede Hilfe wird sehr geschätzt!

Elmer
quelle

Antworten:

7

Wann wird ein Job zu einem früheren Job? Wenn Sie das System um 7:59:50 Uhr einschalten und der atDämon um startet 8:00:01, sollte der Job ausgeführt werden? Was ist, wenn der Dämon um 7:59:59 startet, aber zwei Sekunden benötigt, um alle seine Dateien zu lesen?

Du entscheidest! Beginnen Sie Ihren Job mit einer Zeitüberprüfung und brechen Sie den Vorgang ab, wenn die Zeit abgelaufen ist.

export execute_by_date=$(date +%s 'tomorrow 8:01')
at tomorrow 8:00
[ "$(date +%s)" -le "$execute_by_date" ] || exit
do_stuff
␄
Gilles 'SO - hör auf böse zu sein'
quelle
2

Sie können ein Init-Skript schreiben, das alle geplanten Jobs beim Herunterfahren oder Neustart abbricht.

Ich bin mir bei Arch-Linux nicht sicher - gibt es ein /etc/sysconfig/atoder ähnliches? Vielleicht ist es nur ein Konfigurationsschalter, den Sie umdrehen müssen ...

Nils
quelle
Ich denke, dies ist die beste Lösung. Leeren Sie die atWarteschlange beim Booten, bevor Sie atstarten.
Bahamat
Genau das erwarte / sollte möglich sein! Leider gibt es /etc/sysconfig/in Arch überhaupt kein Verzeichnis ... Und keine der in den Manpages aufgeführten Dateien sind Konfigurationsdateien.
Elmer
@ Elmer Ich habe nur ein bisschen gegoogelt und über Arch Linux gelesen. '/etc/rc.d/atd' scheint dort das Init-Skript für den at-Daemon zu sein. Schauen Sie dort nach, ob Sie sehen können, wie eine Konfigurationsdatei analysiert wird. Wenn Sie dort kein Glück haben, müssen Sie Ihr eigenes Init-Skript aufrufen (z. B. benennen atclearund vorher ausführen atd).
Nils
2

Meine Stimme ist für den cronDämon.

Wenn Sie es zu bestimmten Tageszeiten ausführen müssen, jedoch nicht jeden Tag zur gleichen Zeit, würde ich eine Crontab mit einem Eintrag pro Tagesbereich und einer bestimmten Ausführungszeit erstellen:

Einige Beispiele aus crontab(5):

# run five minutes after midnight, every day
5 0 * * *       command
# run at 2:15pm on the first of every month
15 14 1 * *     command
# run at 10 pm on weekdays
0 22 * * 1-5    command
rpet
quelle
0

Was Sie wollen, ist der Cron-Daemon. Es macht genau das, was Sie wollen.

Füttere deine Lieblingssuchmaschine für Cron Daemon und du hast eine Reihe von Handbüchern und Anweisungen. man cronund man crontabist auch hilfreich.

Marco
quelle
Vielen Dank für die Hilfe, aber Cron funktioniert nicht für mein Problem. Ich brauche ein Skript, das zu bestimmten Tageszeiten ausgeführt wird, aber nicht jeden Tag zur gleichen Zeit.
Elmer