簡體   English   中英

crontab 中的延遲作業

[英]Delayed jobs in crontab

我的操作系統是 ubuntu 18.04.3 LTS,我計划在每天早上 4:00 和 4.05 分別運行 2 個 crontab 作業。

00 4 * * * sh /home/developer/script/batch_load1.sh >> /home/developer/script/log/batch_load1.log 2>&1
05 4 * * * sh /home/developer/script/batch_load2.sh >> /home/developer/script/log/batch_load2.log 2>&1

在batch_load1.sh 和batch_load2.sh 中,他們將讀取一個文本文件並運行一個python 腳本。 我將 2 個 sh bash 腳本分開的原因是我可以並行運行它們並節省時間,因為 batch_load1.sh 需要相當長的時間才能完成。

batch_load1.sh:

batchdate=$(date -d '-1 day' '+%Y%m%d')
today=$(date '+%Y%m%d')

echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Start python virtual environment."

cd /home/developer/script
. venv/bin/activate

echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Start python script."

while read name; do
        echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Processing "${name}" in python script."
        python -u load.py --batchdate $batchdate --target $name >> log/py_output1_$today.log
        echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Finished processing "${name}"."
done < view_list1.txt

echo ""

batch_load2.sh:

batchdate=$(date -d '-1 day' '+%Y%m%d')
today=$(date '+%Y%m%d')

echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Start python virtual environment."

cd /home/developer/script
. venv/bin/activate

echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Start python script."

while read name; do
        echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Processing "${name}" in python script."
        python -u load.py --batchdate $batchdate --target $name >> log/py_output2_$today.log
        echo $(date '+%Y-%m-%d %H:%M:%S')": [DEBUG] Finished processing "${name}"."
done < view_list2.txt

echo ""

但是,當我查看batch_load1.log和batch_load2.log時,它們並沒有在預定的時間啟動,而是被延遲了。 batch_load1 作業在 06:17:11 am 開始

2020-03-10 06:17:11: [DEBUG] Start python virtual environment.
2020-03-10 06:17:12: [DEBUG] Start python script.
2020-03-10 06:17:12: [DEBUG] Processing table1 in python script.
2020-03-10 08:27:32: [DEBUG] Finished processing table1.

batch_load2 作業在 06:17:32 am 開始

2020-03-10 06:17:32: [DEBUG] Start python virtual environment.
2020-03-10 06:17:33: [DEBUG] Start python script.
2020-03-10 06:17:33: [DEBUG] Processing table2 in python script.
2020-03-10 06:20:17: [DEBUG] Finished processing table2.
2020-03-10 06:20:17: [DEBUG] Processing table3 in python script.
2020-03-10 06:22:50: [DEBUG] Finished processing table3.
...
2020-03-10 06:31:25: [DEBUG] Processing table10 in python script.
2020-03-10 06:31:25: [DEBUG] Finished processing table10.

如果我在計划中添加另一個作業 (batch_load3.sh) 在每早上 6:30 運行,它將在早上 6:30 運行並且不會延遲:

30 6 * * * sh /home/developer/script/batch_load3.sh >> /home/developer/script/log/batch_load3.log 2>&1

在 /var/log/syslog.1 中,我可以看到 job1 和 2 在 06:17 am 運行,而 job3 按計划在 06:30 am 運行:

Mar 10 00:10:45 python1 systemd[1]: Started Session 365 of user developer.
Mar 10 00:15:16 python1 snapd[126844]: storehelpers.go:436: cannot refresh snap "core": snap has no updates available
Mar 10 00:15:16 python1 snapd[126844]: autorefresh.go:397: auto-refresh: all snaps are up-to-date
Mar 10 00:17:01 python1 CRON[5740]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Mar 10 00:28:16 python1 systemd[1]: Starting Message of the Day...
Mar 10 00:28:20 python1 50-motd-news[12378]:  * Latest Kubernetes 1.18 beta is now available for your laptop, NUC, cloud
Mar 10 00:28:20 python1 50-motd-news[12378]:    instance or Raspberry Pi, with automatic updates to the final GA release.
Mar 10 00:28:20 python1 50-motd-news[12378]:      sudo snap install microk8s --channel=1.18/beta --classic
Mar 10 00:28:20 python1 50-motd-news[12378]:  * Multipass 1.1 adds proxy support for developers behind enterprise
Mar 10 00:28:20 python1 50-motd-news[12378]:    firewalls. Rapid prototyping for cloud operations just got easier.
Mar 10 00:28:20 python1 50-motd-news[12378]:      https://multipass.run/
Mar 10 00:28:20 python1 systemd[1]: Started Message of the Day.
Mar 10 01:17:01 python1 CRON[41270]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Mar 10 02:17:01 python1 CRON[76669]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Mar 10 03:17:01 python1 CRON[112074]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Mar 10 06:17:11 python1 systemd[1]: Starting Daily apt upgrade and clean activities...
Mar 10 06:17:11 python1 CRON[5977]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

*** Job1 is delayed **
Mar 10 06:17:11 python1 CRON[5998]: (developer) CMD (sh /home/developer/script/batch_load1.sh >> /home/developer/script/log/batch_load1.log 2>&1)

Mar 10 06:17:13 python1 apt.systemd.daily[5972]: Traceback (most recent call last):
Mar 10 06:17:13 python1 apt.systemd.daily[5972]:   File "/usr/bin/unattended-upgrade", line 71, in <module>
Mar 10 06:17:13 python1 apt.systemd.daily[5972]:     import apt_inst
Mar 10 06:17:13 python1 apt.systemd.daily[5972]: ModuleNotFoundError: No module named 'apt_inst'
Mar 10 06:17:13 python1 systemd[1]: Started Daily apt upgrade and clean activities.

*** Job2 is delayed ***
Mar 10 06:17:32 python1 CRON[6271]: (developer) CMD (sh /home/developer/script/batch_load2.sh >> /home/developer/script/log/batch_load2.log 2>&1)

Mar 10 06:25:01 python1 CRON[11357]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))
Mar 10 06:25:16 python1 snapd[126844]: storehelpers.go:436: cannot refresh snap "core": snap has no updates available
Mar 10 06:25:16 python1 snapd[126844]: autorefresh.go:397: auto-refresh: all snaps are up-to-date

*** Job3 ran at expected schedule***
Mar 10 06:30:01 python1 CRON[14434]: (developer) CMD (sh /home/developer/script/batch_load3.sh >> /home/developer/script/log/batch_load3.log 2>&1)

Mar 10 07:17:01 python1 CRON[41944]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Mar 10 08:17:01 python1 CRON[76956]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Mar 10 09:17:01 python1 CRON[112106]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

誰能給我一些關於 crontab 中這種奇怪行為的提示? 提前致謝。

在 /etc/default/rcS.conf 中將 UTC 從 yes 更改為 no。

如果這不起作用,請嘗試:

sudo service rsyslog restart
sudo service cron restart or sudo service crond restart

希望我能更好地幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM