Bash
Jobs zu bestimmten Zeiten
Suche…
Job einmal zu einer bestimmten Zeit ausführen
Hinweis: Bei den meisten modernen Distributionen ist at standardmäßig nicht installiert.
Um einen Job einmal zu einem anderen Zeitpunkt auszuführen, können Sie in diesem Beispiel um 17:00 Uhr verwenden
echo "somecommand &" | at 5pm
Wenn Sie die Ausgabe abfangen möchten, können Sie dies auf die übliche Weise tun:
echo "somecommand > out.txt 2>err.txt &" | at 5pm
at
versteht viele zeitformate, so kann man auch sagen
echo "somecommand &" | at now + 2 minutes
echo "somecommand &" | at 17:00
echo "somecommand &" | at 17:00 Jul 7
echo "somecommand &" | at 4pm 12.03.17
Wenn kein Jahr oder Datum angegeben ist, wird davon ausgegangen, dass der von Ihnen angegebene Zeitpunkt das nächste Mal auftritt. Wenn Sie also eine Stunde geben, die heute schon vergangen ist, wird es morgen angenommen, und wenn Sie einen Monat angeben, der dieses Jahr bereits vergangen ist, wird es nächstes Jahr annehmen.
Dies funktioniert auch mit nohup wie erwartet.
echo "nohup somecommand > out.txt 2>err.txt &" | at 5pm
Es gibt einige weitere Befehle zum Steuern von zeitgesteuerten Jobs:
- atq listet alle Zeitaufträge auf ( atq ueue )
- atrm entfernt einen Zeitauftrag (atr e m ove)
- batch funktioniert grundsätzlich wie at, führt jedoch nur dann Jobs aus, wenn die Systemlast unter 0,8 liegt
Alle Befehle gelten für Jobs des angemeldeten Benutzers. Wenn Sie als Root angemeldet sind, werden systemweite Jobs selbstverständlich behandelt.
Wiederholtes Ausführen von Jobs zu angegebenen Zeitpunkten mit systemd.timer
systemd bietet eine moderne Implementierung von cron . Um ein Skript periodisch auszuführen, ist ein Dienst und eine Timer-Datei erforderlich. Die Service- und Timer-Dateien sollten in / etc / systemd / {system, user} abgelegt werden. Die Servicedatei:
[Unit]
Description=my script or programm does the very best and this is the description
[Service]
# type is important!
Type=simple
# program|script to call. Always use absolute pathes
# and redirect STDIN and STDERR as there is no terminal while being executed
ExecStart=/absolute/path/to/someCommand >>/path/to/output 2>/path/to/STDERRoutput
#NO install section!!!! Is handled by the timer facitlities itself.
#[Install]
#WantedBy=multi-user.target
Als nächstes die Timer-Datei:
[Unit]
Description=my very first systemd timer
[Timer]
# Syntax for date/time specifications is Y-m-d H:M:S
# a * means "each", and a comma separated list of items can be given too
# *-*-* *,15,30,45:00 says every year, every month, every day, each hour,
# at minute 15,30,45 and zero seconds
OnCalendar=*-*-* *:01:00
# this one runs each hour at one minute zero second e.g. 13:01:00