Ubuntu 18.04 cron 作业调用 docker 在运行部分中默默失败,但在普通的 crontab 中工作

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 被调用。cron.hourly和中其他cron.daily未调用 docker 的脚本似乎可以正常工作。 我找不到任何错误消息。 在 CentOS 上,我猜这是一个 SELinux 问题,但在这里我被难住了。 这些脚本是可执行的(否则它们将无法从 crontab 调用),docker 客户端不是交互式的,也不使用终端(没有-it)。

可能出了什么问题?

请注意,我在这里确实有一个非常好的解决方法。我只需从 crontab 调用作业,问题就解决了。我发帖是因为我想了解为什么当脚本由 run-parts 调用时这不起作用,这样我就可以避免将来犯类似的错误。

答案1

尝试.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:[~] 

相关内容