Ubuntu 18.04 задание cron, вызывающее докер, автоматически завершается ошибкой в ​​run-parts, но работает в обычном crontab

Я скопировал несколько заданий cron с сервера CentOS 7, где они выполнялись в cron.daily , на новый сервер Ubuntu 18.04. Задания обращаются к контейнерам докеров и выглядят следующим образом:

#!/bin/bash
/usr/bin/docker exec containername scriptname.sh

Сценарии выполняются и работают правильно при вызове root из оболочки:

/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), клиент-докер не интерактивен и не использует терминал (нет -it ).

Что может быть не так?

Обратите внимание, что у меня есть отличный обходной путь. Я могу просто позвонить по вакансиям из crontab, проблема решена. Я пишу, потому что хочу понять, почему это не работает, когда скрипты вызываются run-parts, чтобы я мог избежать подобной ошибки в будущем.

0
задан 17 July 2019 в 11:10
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:[~] 
1
ответ дан 4 December 2019 в 15:39

Теги

Похожие вопросы