Найти - Пользователи
Полная версия: Работа скрипта, как службы.
Начало » Python для новичков » Работа скрипта, как службы.
1 2 3
xxnikolayxx
Я нашел шаблон демона
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().
"""
s0rg
Если есть задача сделать так чтобы процесс работал после того как прервется сессия
Есть два варианта:
1 - Демон. Он влечет за собой усложнение / увеличения кода. На мой взглад лучше использовать этот подход только когда именно нужен демон - то есть процесс работающий в бекграунде.
2 - Запуск скрипта с nohup или через screen / tmux - самый простой вариант.
xxnikolayxx
s0rg
Если есть задача сделать так чтобы процесс работал после того как прервется сессия
Есть два варианта:
1 - Демон. Он влечет за собой усложнение / увеличения кода. На мой взглад лучше использовать этот подход только когда именно нужен демон - то есть процесс работающий в бекграунде.
2 - Запуск скрипта с nohup или через screen / tmux - самый простой вариант.
Расскажи пожалуйста поподробнее, как работает демон.
Вот код, что по ссылке я правильно понял?
каким образом он остается на плаву и позволяет пользоваться файлами, что использует, я понять не могу, чисто технически.
И нужно ли в демоне ставить цикл и засыпание?
xxnikolayxx
s0rg, можешь книжку посоветовать по питону?
Хочу начать что-то одно читать, но уже очень долго не могу выбрать.
s0rg
Классический демон делает следующее:
1. Вызывает функцию fork() и завершает родителя.
2. В ребенке закрывает и перенаправляет stdin / stdout / stderr, устанавливает права, маски и группу процессов.
3. Устанавливает обработчики сигналов.
4. Начинает выполнение основного цикла в котором и выполняет всю работу
(если он должен делать эту работу периодически - то да, можно и sleep воткнуть).

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

Просто задачу ‘сделать так чтобы программа работала после закрытия терминала’ можно решить намного проще.
xxnikolayxx
s0rg
Просто задачу ‘сделать так чтобы программа работала после закрытия терминала’ можно решить намного проще.
Спасибо за информацию, полезно.
Ну и как же?
s0rg
Ну написал же )
nohup
а еще лучше - screen или tmux если *bsd
xxnikolayxx
А можно сделать, чтобы они выполнялась каждые 5 минут?
без time.sleep?
s0rg
Ну написал же )
nohup
а еще лучше - screen или tmux или *bsd
Я просто был немного заинтригован =)
s0rg
xxnikolayxx
А можно сделать, чтобы они выполнялась каждые 5 минут?
без time.sleep?
cron
doza_and
на самом деле периодическое выполнение делают планировщики
http://docs.python.org/library/sched.html - это встроенный попроще
http://packages.python.org/APScheduler/ - этот чуток посложнее - может работать и как cron

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

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

p.s.
без time.sleep?
А зачем? Внутренняя реализация - второго - треды и почти наверняка wait for timer.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB