Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 28, 2011 23:04:46

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

Я нашел шаблон демона
http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/

Скажите, а он сможет решить мою проблему?
Я так понимаю это и есть реализация библиотеки, о которой шла речь выше.
Код мне свой нужно впиндерить сюда:

def restart(self):
"""
Restart the daemon
"""
self.stop()
self.start()

def run(self):
"""
You should override this method when you subclass Daemon. It will be called after the process has been
daemonized by start() or restart().
"""

Офлайн

#2 Дек. 28, 2011 23:09:00

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

Если есть задача сделать так чтобы процесс работал после того как прервется сессия
Есть два варианта:
1 - Демон. Он влечет за собой усложнение / увеличения кода. На мой взглад лучше использовать этот подход только когда именно нужен демон - то есть процесс работающий в бекграунде.
2 - Запуск скрипта с nohup или через screen / tmux - самый простой вариант.

Офлайн

#3 Дек. 28, 2011 23:12:26

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

s0rg
Если есть задача сделать так чтобы процесс работал после того как прервется сессия
Есть два варианта:
1 - Демон. Он влечет за собой усложнение / увеличения кода. На мой взглад лучше использовать этот подход только когда именно нужен демон - то есть процесс работающий в бекграунде.
2 - Запуск скрипта с nohup или через screen / tmux - самый простой вариант.
Расскажи пожалуйста поподробнее, как работает демон.
Вот код, что по ссылке я правильно понял?
каким образом он остается на плаву и позволяет пользоваться файлами, что использует, я понять не могу, чисто технически.
И нужно ли в демоне ставить цикл и засыпание?

Офлайн

#4 Дек. 28, 2011 23:15:01

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

s0rg, можешь книжку посоветовать по питону?
Хочу начать что-то одно читать, но уже очень долго не могу выбрать.

Офлайн

#5 Дек. 28, 2011 23:24:11

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

Классический демон делает следующее:
1. Вызывает функцию fork() и завершает родителя.
2. В ребенке закрывает и перенаправляет stdin / stdout / stderr, устанавливает права, маски и группу процессов.
3. Устанавливает обработчики сигналов.
4. Начинает выполнение основного цикла в котором и выполняет всю работу
(если он должен делать эту работу периодически - то да, можно и sleep воткнуть).

Это только ‘на пальцах’. Подробнее - у Стивенса.

Просто задачу ‘сделать так чтобы программа работала после закрытия терминала’ можно решить намного проще.

Офлайн

#6 Дек. 28, 2011 23:34:32

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

s0rg
Просто задачу ‘сделать так чтобы программа работала после закрытия терминала’ можно решить намного проще.
Спасибо за информацию, полезно.
Ну и как же?

Офлайн

#7 Дек. 28, 2011 23:36:44

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

Ну написал же )
nohup
а еще лучше - screen или tmux если *bsd

Отредактировано (Дек. 28, 2011 23:37:04)

Офлайн

#8 Дек. 28, 2011 23:36:46

xxnikolayxx
От:
Зарегистрирован: 2011-12-05
Сообщения: 161
Репутация: +  0  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

А можно сделать, чтобы они выполнялась каждые 5 минут?
без time.sleep?

s0rg
Ну написал же )
nohup
а еще лучше - screen или tmux или *bsd
Я просто был немного заинтригован =)

Отредактировано (Дек. 28, 2011 23:37:35)

Офлайн

#9 Дек. 28, 2011 23:38:15

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

xxnikolayxx
А можно сделать, чтобы они выполнялась каждые 5 минут?
без time.sleep?
cron

Офлайн

#10 Дек. 29, 2011 17:33:31

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Работа скрипта, как службы.

на самом деле периодическое выполнение делают планировщики
http://docs.python.org/library/sched.html - это встроенный попроще
http://packages.python.org/APScheduler/ - этот чуток посложнее - может работать и как cron

Если ими пользоваться то в отличии от cron сохраняется контекст процесса - те данные между сессиями можно в питоне хранить.

Я кстати сделал расширенный планировщик - c gui и без оного особенность которого была в том что он при запуске запланированных задачек обрабатывал ограниченность ресурсов машины. Например не пускал слишком много процессов, учитывал занятость файлов ограниченность количества коннектов к базам и т.п.

p.s.
без time.sleep?
А зачем? Внутренняя реализация - второго - треды и почти наверняка wait for timer.



Отредактировано (Дек. 29, 2011 17:35:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version