Приветствую. Вопрос знатокам!
Есть python скрипт, точнее команда django
создал cron.ssh с содержимым
#!/bin/sh
source ~/myenv/bin/activate && cd ~/public_html/site && python manage.py todo && deactivate
приходит письмо с /home/c/cXXXX/cron.sh: 2: /home/c/cXXXXX/cron.sh
Скрипт из консоли из virtualenv работает. Но в кроне не запускается.. Подскажите пожалуйста что я делаю не так?
Спасибо!
Ответы (4)
Со стороны службы поддержки не производится анализ пользовательских скриптов. Cпособ решения обозначенной проблемы необходимо будет найти самостоятельно либо привлечь стороннего специалиста.
Мы рекомендуем еще раз внимательно проверить размещенные директивы.
Ну во 1-х: Выяснилось, что cron вызывается исключительно через #!/bin/sh. Никаких #!/bin/bash и файлов с расширение *.bash он не видит и не понимает.. Покрайней мере в crontab можно выбирать только sh сценарий.
Во 2-х: Оказалось что в sh не работает стандартная утилита source ! Возможно у администратора с правами она и работает, но у нас, у смертных - Permission denied. Причем если запуститься из под bash, а по умолчанию он и стоит) Все работает! Это и обьясняет то, что скрипты прекрасно отрабатываются в консоле, но вываливаются через cron.
В итог:. Я решил вовсе отказаться от обращения к virtualenv через source / activate. А запускать скрипт напрямую, указав полный путь до python, и скрипта (а у нас в django это manage.py) и дальше все команды стандартно...
В итоге мой cron.sh теперь выглядит так:
#!/bin/sh
/home/c/xxxxxx/env/bin/python /home/c/xxxxxxx/gorod/public_html/site/manage.py todo
Все отлично отрабатывает. Вообще крон классная штука. Уж очень не хотелось курить маны и ставить Celery. Надеюсь мой опыт кому нибудь сократит время.
Лично я Django в своих проектах не использую, ограничиваясь привычными всем CMS, но тешу себя надеждами что когда-то буду освою и направление работы с фреймворками вроде Django.
Вообще было бы здорово, если бы техническая поддержка влет могла указать на выявленный вами факт, но если готовым решением они не обладали, им бы наверняка потребовалось провести анализ вроде вашего, а думаю что это заняло бы не 5 и не 15 минут. Поэтому предложенный вариант по самостоятельному анализу понятен и здорово что удалось разобраться с проблемой. Так держать!