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 


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow