Мне было интересно, правильно ли написаны мои задания crontab. Я надеюсь запустить их на VPS, а мониторинг их на самом деле невозможен. Без лишних слов, вот мои задания cron:
# cd into directory at 2:57 AM
57 2 * * 1-5 cd /folder_name
# activate the virtual environment
58 2 * * 1-5 . env/bin/activate
# run the main script
59 2 * * 1-5 python main.py
# at 5pm break the script (worried the most about this part)
0 16 * * 1-5 ^C
Кроме того, я изменил системные часы на восточное время. Означает ли это, что задания cron будут выполняться с использованием восточного часового пояса?
решение1
Нет, cron
это не оболочка. Написать скрипт:
#!/bin/sh
cd /folder_name
. env/bin/activate
exec python main.py
Сделайте его исполняемым, а затем укажите crontab
на него запись:
57 2 * * 1-5 /path/to/script
Скрипт должен запускаться каждый понедельник-пятницу в 2:57 по местному времени (по мнению вашего компьютера). Если вы правильно настроили свою почтовую систему, результаты (если таковые имеются) будут отправлены вам по почте.
решение2
Ваши задания cron написаны неправильно. Каждое задание cron получает свою собственную среду, что означает, что cd
команда не имеет никакого отношения к следующим заданиям cron.
Что касается виртуальных сред, я предлагаю вам вручную активировать виртуальную среду, а затем запустить which python
себя. Это даст вам полный путь к , python
который всегда будет работать в этой виртуальной среде. Вы должны использовать этот путь python в вашем cron.
Окончательный файл crontab должен выглядеть примерно так:
0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py
Что касается последующего завершения процесса, наиболее распространенным решением этой проблемы является использование pidfile. Существуют библиотеки python, которые помогут вам сделать это. Этот ответдовольно подробно освещает эту тему, но на самом деле не имеет отношения к вопросу о crontab.