Anhalten des ADT-Jobs zur angegebenen Zeit

Anhalten des ADT-Jobs zur angegebenen Zeit

Ich versuche, den Download nachts zu planen. Ich habe einen atdJob erstellt, der das Download-Skript um 2 Uhr morgens startet. Jetzt möchte ich denselben Job um 7 Uhr morgens stoppen, wenn er noch läuft. Was ich jetzt mache, ist einfach shutdown -h 7:00: Ist es möglich, atdden Job zu einer bestimmten Zeit zu stoppen?

Antwort1

Ich sehe darin keinen Mechanismus, atmit dem Sie eine Stoppzeit angeben können. Ich würde einfach atum 7 Uhr morgens einen anderen Job planen, der prüft, ob einer dieser Jobs noch ausgeführt wird, und ihn beendet.

Antwort2

AtJobs werden mit einem Shell-Interpreter ausgeführt (unter Linux ist dies normalerweise /bin/sh). Das bedeutet, dass jeder Befehl, den Sie als Job ausführen, atdurch eine PID-Nummer der Shell verfolgt werden kann, die diesen Befehl ausführen wird. Sie können diese PID einfach mit der speziellen Shell-Variable erfassen $$. Sie können sie in einer Datei speichern (einfache Anführungszeichen sind obligatorisch, damit sie in Ihrer aktuellen Sitzungsshell nicht erweitert wird):

at 'echo $$ > /var/run/my_at_job.pid; your_command; rm /var/run/my_at_jon.pid' | at TIME_SPEC

und später atkönnen Sie in einem anderen Job den Job und alle von ihm erzeugten Kindprozesse beenden ( you_command):

if [ -r /var/run/at_job.pid ]; then
  for PID in $(ps --ppid `cat /var/run/at_job.pid` -o pid | sed -e '1d'); do
    kill $PID
  done
fi

Antwort3

Sie könnten das Timeout in Ihre Arbeit integrieren.

timeout "$(($(date +%s -d '7am') - $(date +%s)))" wget -c http://example.com/wibble

Alternativ können Sie Ihren Job seine Prozess-ID irgendwo aufschreiben lassen, damit Sie ihn beenden können. Im Job um 2 Uhr morgens:

echo $$ >~/.at.download.pid
wget -c http://example.com/wibble
rm ~/.at.download.pid

Im 7-Uhr-Job:

if [ -e ~/.at.download.pid ]; then
  kill $(~/.at.download.pid)
  rm ~/.at.download.pid
fi

verwandte Informationen