Wie führe ich ein Skript zu einem bestimmten Zeitpunkt unter Linux aus? [geschlossen]

80

Ich habe eine Textdatei mit einem bestimmten Datum und einer bestimmten Uhrzeit. Ich möchte in der Lage sein, ein Skript zu dem in dieser Datei angegebenen Zeitpunkt auszuführen. Wie würden Sie das erreichen? Ein anderes Skript erstellen, das im Hintergrund ausgeführt wird (eine Art Deamon) und jede Sekunde prüft, ob die aktuelle Zeit mit der Zeit in der Datei übereinstimmt? Gibt es eine andere Art und Weise? Die Maschine ist ein Linux- Server, Debian keuchend. Danke im Voraus

Aaron Ullal
quelle
4
Gibt es einen Grund, warum Cron nicht funktioniert?
Lreeder
12
Warum ist dieses Thema geschlossen? Das ist eine sehr vernünftige Frage. Die Google-Suche hat Sie als Nummer 1 geführt. Und die Antworten sind ziemlich nerdisch. Also jemand, der dies beantworten kann, ist klar Englisch wird gesperrt
Richard de Ree
2
@Richard Ich vermute, dass der Grund, warum StackOverflow so viele Fragen wie diese schließt, darin besteht, Benutzer dazu zu ermutigen, Fragen, die nicht zum Thema gehören, hier auf der entsprechenden StackExchange-Site zu platzieren. Es gibt einige neue SE-Sites, die zuvor nicht existierten. Zum Beispiel gibt es einige sehr nützliche Vim-Fragen zu SO, die als Off-Topic geschlossen wurden, und jetzt, da es eine Vi / Vim-SE gibt, wären diese Fragen dort zum Thema. Ich denke nur nach. Dies scheint jedoch immer noch eine Programmierfrage zu sein
mgarey
2
Tbh Ich vergesse jedes Mal, wie ich Cron benutze, nachdem ich es gelernt habe, und ich brauche nichts Fortgeschrittenes.
sudo

Antworten:

146

Schauen Sie sich Folgendes an:

echo "ls -l" | at 07:00

Diese Codezeile führt "ls -l" zu einem bestimmten Zeitpunkt aus. Dies ist ein Beispiel für die Ausführung von etwas (in meinem Beispiel ein Befehl) zu einem bestimmten Zeitpunkt. "at" ist der Befehl, nach dem Sie wirklich gesucht haben. Die technischen Daten können Sie hier lesen:

http://manpages.ubuntu.com/manpages/precise/en/man1/at.1posix.html http://manpages.ubuntu.com/manpages/xenial/man1/at.1posix.html

Ich hoffe es hilft!

Antoni
quelle
2
Erhalten Sie einen Fehler Can't open /var/run/atd.pid to signal atd. No atd running?einen Hinweis?
HappyCoding
2
Sie benötigen den atdlaufenden Daemon at. Auf Manjaro OpenRC können Sie at-openrcden Daemon atd-Dienst einfach installieren und hinzufügen mit: sudo rc-update add atdund beginnen mit sudo rc-service atd start. Normalerweise atenthielt das Paket bereits einen Dienst systemd(das Standard-Init / Service-System unter verschiedenen Distributionen Linux einschließlich Ubuntu), mit dem es gestartet sudo systemctl start atdund der Autostart auf Init mit aktiviert werden kann sudo systemctl enable atd.
Manoel Vilela
8
In meinem Fall druckt dies "Job 6 am 2017-08-21 10:53" sofort aus ...
Jewenile
Übrigens beschreibt meine Bash-Dokumentation eine at -cVerwendung. Wofür ist es, wenn die Möglichkeit, einen Befehl auszuführen, darin besteht, ihn in std in weiterzuleiten?
Tom Russell
Wird dieses Skript später ausgeführt, wenn das System zu diesem Zeitpunkt ausgeschaltet war?
Shrijit
18

Der atBefehl existiert speziell für diesen Zweck (im Gegensatz zu crondem, der zum Planen wiederkehrender Aufgaben vorgesehen ist).

at $(cat file) </path/to/script
Tripleee
quelle
1
Mit Bash würden Sie schreiben$(< file)
Glenn Jackman
9

Cron ist gut für etwas, das regelmäßig läuft, wie jeden Samstag um 4 Uhr morgens. Es gibt auch Anacron , das sich um Stromausfälle, Schlafstörungen und so weiter kümmert. Sowie bei .

Für eine einmalige Lösung, für die weder root noch etwas erforderlich ist, können Sie einfach das Datum verwenden , um die Sekunden seit der Epoche der Zielzeit sowie die aktuelle Zeit zu berechnen, und dann den Ausdruck verwenden , um den Unterschied zu ermitteln, und schlaf so viele Sekunden.

Anony
quelle
10
Ein atJob bleibt auch dann geplant, wenn der Computer in der Zwischenzeit neu gestartet wird.
Tripleee
7

Normalerweise verwenden Sie unter Linux crontabdiese Art von geplanten Aufgaben. Sie müssen jedoch die Zeit angeben, zu der Sie den Timer einrichten. Wenn Sie also möchten, dass er in der Datei selbst konfiguriert werden kann, müssen Sie einen Mechanismus dafür erstellen.

Aber im Allgemeinen würden Sie zum Beispiel verwenden:

30 1 * * 5 /path/to/script/script.sh

Würde das Skript jeden Freitag um 1:30 (AM) ausführen Hier:

30 ist Minuten

1 ist Stunde

Die nächsten 2 * sind day of monthund month(in dieser Reihenfolge) und 5ist Wochentag

Julumme
quelle
2
Wie würden Sie diesen Befehl auslösen?
Aaron Ullal
1
Crontab Guru ( crontab.guru ) ist ein hilfreiches Tool für die Crontab-Konfiguration.
Umesh .A Bhat