Как сделать сценарий Python выполненным как сервис или демон в Linux

Добавьте определение для перезаписи stricmp с помощью strcasecmp на платформах, которые вы ищете.

#ifdef _IPHONE <- your platform define here
#define stricmp strcasecmp
#define strnicmp strncasecmp
#endif

Тогда вы всегда можете просто использовать stricmp.

163
задан Martin Thoma 27 April 2016 в 14:04
поделиться

4 ответа

У вас есть два варианта:

  1. Создать правильное задание cron , которое вызывает ваш скрипт. Cron - это общее название демона GNU / Linux, который периодически запускает скрипты в соответствии с установленным вами расписанием. Вы добавляете свой скрипт в crontab или помещаете на него символическую ссылку в специальный каталог, и демон выполняет задание по его запуску в фоновом режиме. Вы можете узнать больше в Википедии. Существует множество различных демонов cron, но в вашей системе GNU / Linux он должен быть уже установлен.

  2. Используйте какой-нибудь подход python (например, библиотеку), чтобы ваш скрипт мог демонизировать себя. Да, для этого потребуется простой цикл обработки событий (в котором ваши события запускаются по таймеру, возможно, благодаря функции сна).

Я бы не рекомендовал вам выбирать 2., потому что вы, по сути, повторение функциональности cron. Системная парадигма Linux заключается в том, чтобы позволить нескольким простым инструментам взаимодействовать и решать ваши проблемы. Если нет дополнительных причин, по которым вы должны создать демона (в дополнение к периодическому запуску), выберите другой подход.

Кроме того, если вы используете daemonize с циклом и произойдет сбой, никто не будет проверять почту после этого ( как указал Иван Невоструев в комментариях к этому ответу). Если же сценарий добавлен как задание cron, он просто сработает снова.

после этого почту никто не проверяет (как указал Иван Невоструев в комментариях к этому ответу). Если же сценарий добавлен как задание cron, он просто сработает снова.

после этого почту никто не проверяет (как указал Иван Невоструев в комментариях к этому ответу). Если же сценарий добавлен как задание cron, он просто сработает снова.

93
ответ дан 23 November 2019 в 21:17
поделиться

Во-первых, прочтите почтовые псевдонимы. Почтовый псевдоним будет делать это внутри почтовой системы, и вам не придется дурачиться с демонами, службами или чем-либо в этом роде.

Вы можете написать простой сценарий, который будет выполняться sendmail каждый раз, когда почтовое сообщение отправляется на адрес электронной почты. конкретный почтовый ящик.

См. http://www.feep.net/sendmail/tutorial/intro/aliases.html

Если вы действительно хотите написать излишне сложный сервер, вы можете это сделать.

nohup python myscript.py &

Это все, что нужно. Ваш скрипт просто зацикливается и засыпает.

import time
def do_the_work():
    # one round of polling -- checking email, whatever.
while True:
    time.sleep( 600 ) # 10 min.
    try:
        do_the_work()
    except:
        pass
3
ответ дан 23 November 2019 в 21:17
поделиться

Вы можете использовать fork (), чтобы отсоединить ваш скрипт от tty и продолжить его выполнение, например:

38
ответ дан 23 November 2019 в 21:17
поделиться

Вам следует использовать библиотеку python-daemon , она обо всем позаботится.

Из PyPI: Библиотека для реализации хорошо работающего процесса демона Unix .

57
ответ дан 23 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: