Ubuntu

Ubuntu 18.04 cron 作業呼叫 docker 在執行元件中靜默失敗,但在普通 crontab 中工作

  • August 6, 2019

我已經將幾個 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:[~] 

引用自:https://serverfault.com/questions/975548