Scheduling

在指定時間停止 atd 作業

  • October 11, 2013

我正在嘗試安排在晚上下載。我創建了一個atd在凌晨 2 點開始下載腳本的作業。現在,如果它仍在執行,我想在早上 7 點停止相同的工作。我現在做的只是shutdown -h 7:00。是否可以在指定時間停止atd工作?

我沒有看到at允許您指定停止時間的機制。我會at在早上 7 點安排另一個工作,檢查這些工作中的任何一個是否仍在執行並殺死它們。

At作業使用 shell 解釋器執行(在 Linux 上,通常是/bin/sh)。這意味著您要作為at作業執行的任何命令都可以通過要執行該命令的 shell 的 PID 號進行跟踪。您可以使用特殊的 shell 變數簡單地擷取此 PID $$。您可以將其保存到文件中(單引號是強制性的,以免在目前會話 shell 中擴展它):

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

稍後,在另一個at作業中,您可以終止該作業及其所有衍生的子程序(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

引用自:https://unix.stackexchange.com/questions/94507