Ubuntu
Ubuntu 18.04 cron 作業呼叫 docker 在執行元件中靜默失敗,但在普通 crontab 中工作
我已經將幾個 cron 作業從它們一直在其中執行的 CentOS 7 伺服器複製
cron.daily
到新的 Ubuntu 18.04 伺服器。這些作業呼叫到 docker 容器中,如下所示:#!/bin/bash /usr/bin/docker exec containername scriptname.sh
當 root 從 shell 呼叫這些腳本時,這些腳本是可執行的並且可以正常工作:
/etc/cron.daily/script.sh # this works
/etc/crontab
此外,當我直接從它們的工作中呼叫腳本時:35 0 * * * root /etc/cron.daily/script.sh # this works
但是,它們應該由執行部分呼叫:
45 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
當腳本位於
cron.hourly
和時,這都會靜默失敗cron.daily
。系統日誌包含如下行:Jul 17 09:45:01 servername CRON[5436]: (root) CMD ( cd / && run-parts -v /etc/cron.hourly )
換句話說,run-parts 被呼叫。其他不呼叫 docker 的腳本
cron.hourly
似乎cron.daily
可以工作。我找不到任何錯誤消息。在 CentOS 上,我會猜到這是一個 SELinux 問題,但在這裡我被難住了。這些腳本是可執行的(或者它們不能從 crontab 呼叫),docker 客戶端不是互動式的並且不使用終端(否-it
)。有什麼問題?
請注意,我在這裡確實有一個非常好的解決方法。我可以簡單地從 crontab 呼叫作業,問題就解決了。我發帖是因為我想了解為什麼在執行元件呼叫腳本時這不起作用,這樣我就可以避免將來犯類似的錯誤。
嘗試
.sh
從腳本中刪除擴展:wally:[~] ls -l /tmp/foo total 8 -rwxr-xr-x 1 mdz mdz 27 Aug 5 22:58 bar.sh -rwxr-xr-x 1 mdz mdz 27 Aug 5 22:58 baz wally:[~] cat /tmp/foo/bar.sh #!/bin/bash echo I am bar wally:[~] cat /tmp/foo/baz #!/bin/bash echo I am baz wally:[~] run-parts /tmp/foo I am baz wally:[~] mv /tmp/foo/bar.sh /tmp/foo/bar wally:[~] run-parts /tmp/foo I am bar I am baz wally:[~]