如何檢查使用“at”命令提交的批次作業的運行時日誌?

如何檢查使用“at”命令提交的批次作業的運行時日誌?

我在 Ubuntu 20 提交批次作業。

at now -f myscript.sh

作業完成後,我會收到一封包含日誌的電子郵件。但對於一項耗時的工作,我希望看到執行過程中的進展。我怎樣才能做到這一點?

答案1

這將非常冗長,但如果您將 -x 新增至 myscript.sh 第一行的 shell 中,它將顯示腳本的逐行執行。輸出將透過電子郵件傳送給提交作業的用戶,並且也會出現在 cron 日誌中。

例如,#!/bin/sh -x 而不是 #!/bin/sh

當作業正在進行時,只需 tail -f cron 日誌即可查看進度。提醒一下,這會產生大量的日誌資料!您可能會選擇修改腳本以某種方式顯示進度? echo“拆解完成,開始安裝xxx”

答案2

at工具會捕獲進程的標準輸出,然後將其作為日誌發送。因此,如果不對日誌進行重大更改,at就不可能在寫入日誌時讀取該日誌。

但您可以使用第二個日誌來解決此問題。只需將“進度”日誌列印到具有已知名稱的檔案中即可。之後,您可以tail -f根據需要或忽略它。

換句話說,您運行的腳本at將類似於:

#!/bin/sh
echo Started at `date` 
echo Started at `date` > /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc
echo Completed at `date` with return code $rc >> /var/myscript.log

在這種情況下,您將有一個簡短的日誌(只有兩行)用於at郵寄給您,以及來自長時間運行的內部部分的所有日誌。

作為此方法的擴展,您可以使用tee.它允許將標準輸出複製到文件中。這反過來又可以幫助在腳本中重複列印日誌訊息。

#!/bin/sh
echo Started at `date` | tee /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc | tee -a /var/myscript.log

相關內容