2015-12-28 7 views
1

Я пытаюсь запустить несколько скриптов python через Crontab в контейнере докеры Centos, но ничего не пробовал работать.crontab не работает на контейнере Docker Centos

Во-первых, я установил хрон:

yum install vixie-cron 

Тогда я побежал в качестве услуги:

/etc/init.d/crond start 

(Я побежал /sbin/service crond начало, потому что ответы на некоторые смежные вопросы предложил так)

ps aux | grep cron:

root  16917 0.0 0.0 23288 1252 ?  Ss 18:53 0:00 crond                     
root  16929 0.0 0.0 9720 836 pts/0 S+ 18:55 0:00 grep cron 

crontab -l выглядит следующим образом:

0 17 1 * * /root/proj/env/bin/python /root/proj/files/frontend/file1.py > /var/log/cron.log              

0 9 4 * * /root/proj/env/bin/python /root/proj/files/frontend/file2.py > /var/log/cron.log              

0 17 15 * * /root/proj/env/bin/python /root/proj/files/frontend/file3.py > /var/log/cron.log              

0 9 18 * * /root/proj/env/bin/python /root/proj/files/frontend/file4.py > /var/log/cron.log              

0 14 * * * /root/proj/env/bin/python /root/proj/files/frontend/file5.py > /var/log/cron.log            

0 8 * * * /root/proj/env/bin/python /root/proj/files/frontend/file6.py > /var/log/cron.log             

* * * * * echo 'Check!!' > /var/log/cron.log 

Все скрипты питона и cron.log файл не имеет разрешение 777 Последняя запись в кронтаб просто проверить, если что-то становится записывается в файл журнала ... но ничего там написано.

Любая идея, как это решить?

PS: Я просмотрел тонну связанных QNAs, но никто из них не помог.

Некоторых ответов предложили письменно /etc/crontab .. так что я даже сделал запись: * * * * * root echo 'Blah' > var/log/cron.log там .. но никакого эффекта :(

+0

это нормально, что вы так много пробелов после каждой строки? Кроме того, какой пользователь вы используете для этих кронов? Что вы получаете, если говорите «статус службы поддержки»? – fedorqui

+0

@fedorqui: Я запускаю их как root, потому что AFAIK пользователь crontab - это пользователь, выполнивший команду crontab -e ... «Состояние службы скрона» показывает, что 'crond (pid 16917) запущен ...' – ofey

+0

OK , Не уверен, какова ваша последняя линия. Для пользователя не требуется 'root',' * * * * * echo "hi" >>/tmp/test.log' должно быть достаточно. – fedorqui

ответ

4

После дня, неиспользуемый в неоптимальной Googling и экспериментах, ответ на эту головоломку был закомментировав следующая строка в файле /etc/pam.d/crond (а затем запустить service crond restart)..

session required pam_loginuid.so 

Это происходит из-за какой-то вопрос безопасности Докер-Centos у меня нет более подробной информации о том, почему это работает (Проверьте this.)

Кроме того, устранение неполадок это заставило меня понять несколько моментов, которые может быть полезным:

  • Убедитесь, что вы crond работает как сервис (если нет, то используйте /etc/init.d/crond start)

  • В каждой строке в вашем crontab следует следовать символ новой строки

  • Ваши сценарии и файл журнала должны иметь подходящий е запись/выполнение разрешения

  • кронтаб файл не должен иметь странные символы среде Windows (как^M)

  • В некоторых редких случаях, crond может иметь другой часовой пояс, чем ваш системы

  • Также проверьте /etc/cron.allow and /etc/cron.deny файлы для проверки, кто может добавлять/редактировать задания хрон

май ваш день будет инвестироваться в более плодотворные занятия, незнакомец.

0

Я рекомендую запустить хроны под хозяином и команды запуска внутри контейнера

пример:

0 17 1 * * /usr/bin/docker exec container_name /root/proj/env/bin/python /root/proj/files/frontend/file1.py > /var/log/cron.log              
Смежные вопросы