Запуск приложения по cron

12
S3
На сайте с 29.03.2012
Offline
340
1771

Написал себе простенький парсинг сайта, на Python. Но теперь надо запускать его автоматически, например раз в сутки. Естественный вариант для сервера на Debian - Использовать crontab.

Но я в этом полный нуб, поэтому прошу помощи.

Мне нужно запустить виртуальное окружение и в нем запустить мое приложение.

Руками это делается так


$ cd /etc/path_to_application
$ workon application
(application)$ python manage.py parse

Как все это запихнуть в крон, только подробно, для чайников? Спасибо)

W
На сайте с 09.04.2013
Offline
46
#1

Как то так:

1. Написать bash скрипт


#!/bin/bash
source `which virtualenvwrapper.sh`
cd /etc/path_to_application
workon application
python manage.py parse
deactivate

2. Дать права на исполнение


chmod +x myscript.sh

3. Добавить в крон


crontab -e

Подробнее http://stackoverflow.com/questions/7538628/virtualenvwrapper-functions-unavailable-in-shell-scripts

M2
На сайте с 11.01.2011
Offline
341
#2

Sly32,

сервак на линуксе? в консоли пишем:


crontab -e

открывается текстовый редактор, в котором будут строчки с первым символом "#" - это комментарии.

Последний коммент будет выглядеть так:


#m h dom mon dow command

Это - подсказка для вас. После этой строки, на новой, и идёт команда, которая будет выполняться по крону.

Значения таковы:

1. Минута

2. Час

3. День месяца

4. Месяц

5. День недели

6. Команда

Ну теперь очень несложно написать команду. К примеру, чтобы файл запускался на исполнение раз в сутки в 10 вечера, надо написать:

0 22 * * * /root/file

Затем обязательно перейти на другую строчку и сохранить файл. Если перехода на строчку не будет осуществлено, команда крона не запишется.

Да, в этой команде звездочки обозначают любые значения. Т.е. читаем: "запустить файл /root/file в 0 минут 22 часов любого дня месяца (каждого, любого месяца (каждого) и любого дня недели (каждого). Иначе говоря, команда будет каждый день запускаться в 10 вечера.

Время, кстати, определяется по тому, что выдаёт date в консоли. Т.е. посмотрите, какое стоит время на сервере, и уже от этого отталкивайтесь, какое время указать в команде.

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

chmod 0777 /root/file

------------------- Крутые VPS и дедики. Качество по разумной цене ( http://cp.inferno.name/view.php?product=1212&gid=1 ) VPS25OFF - скидка 25% на первый платеж по ссылке выше
S3
На сайте с 29.03.2012
Offline
340
#3

mark2011, webjey, Спасибо, но эту теорию я уже изучил) мне бы конкретный пример)) что набирать в командной строке, в скрипте...

И как проверить правильность выполнения? Где то наталкивался что есть типа --verify cron

Сейчас добавил просто в кроне следующее


* */23 * * * /home/path/Work/Projects/rent/workon rentalcar && /home/path/Work/Projects/rent/manage.py parse && /home/path/Work/Projects/rent/deactivate

DT
На сайте с 28.11.2006
Offline
298
#4

А от куда все это запускаете? Если на хостинге, то там должен быть удобный крон, где не нужно знать команды. Проставляете нужное, указываете время, путь к файлу и все заработает.

Дешевый CloudLinux хостинг (http://www.provisov.net) много площадок в России, Франции, Украине, Германии, Нидерландах, США, Канаде. SSL-сертификат (https://www.provisov.net/blog/2016/10/26/besplatnyj-ssl-sertifikat-dlya-vsex-vashix-sajtov/) бесплатный и предустановленный для всех доменов
S3
На сайте с 29.03.2012
Offline
340
#5

dmitrii_trof, Для начала тренируюсь на локали, на хостинге у меня никаких панелей нет, поэтому все только через консоль.

---------- Добавлено 16.08.2016 в 17:39 ----------

Глаза боятся а руки делают)))

Стоило совсем немного вникнуть)

Пошел по пути написания баш-скрипта и добавления его в крон


#!/bin/bash
source `which virtualenvwrapper.sh`
cd /home/path/to/appl/rent
workon rentalcar
python manage.py parse
deactivate

Положил скрипт в папку с проектом, чтоб потом не искать

и в crontab посредством crontab -e


* */23 * * * /home/path/to/appl/rent/parse.sh

Всем огромное спасибо, что наставили на путь истинный)))

Если что-то неверно - прошу подправить.

S
На сайте с 23.05.2004
Offline
315
#6

deactivate кстати не обязательно, по умолчанию все закроется.

Скажем с учетом что:

/home/project - директория проекта

env - директория virtualenv окружения.

Тогда запись в кроне :

20 05 * * * cd /home/project && source env/bin/activate && python manage.py parse >> cron_parse.log

Это просто подпись.
S3
На сайте с 29.03.2012
Offline
340
#7
Stek:
Тогда запись в кроне :

20 05 * * * cd /home/project && source env/bin/activate && python manage.py parse >> cron_parse.log

Спасибо, как вариант можно и так. Вопрос - в этом случае лог куда будет писаться? В эту же папку?

S
На сайте с 23.05.2004
Offline
315
#8

да, именно туда, куда перешли в самом начале. Но и так же можно указать любую другую, только путь задать полный.

S3
На сайте с 29.03.2012
Offline
340
#9

Stek, Понятно, спасибо. Еще вопрос - что выгоднее - запускать окружение через workon или через source ... activate?

S
На сайте с 23.05.2004
Offline
315
#10
Sly32:
запускать окружение через workon или через source ... activate?

Вообще без понятия. Как понимаю workon - это от утилиты virtualenvwrapper . Я у себя ее просто не использую, так как не вижу смысла в этой лишней прослойке.

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий