Ubuntu 14.04 VPS - Как поддерживать процесс в рабочем состоянии в фоне и периодически удостоверяться, что он все еще работает

У меня есть VPS Ubuntu 14.04, который размещает один из моих сайтов, который динамично сгенерирован, пользуясь Библиотекой Пеликана Python. Существует, "делают, повторно создают" команду, которую я могу выполнить, который автоматически проверит на изменения в исходных файлах и когда она найдет их, она автоматически повторно создаст HTML с новыми изменениями.

Это работает отлично, когда я зарегистрирован в VPS, и позволяющий это обрабатывает для выполнения в терминале, но когда я выхожу из системы, он останавливается.

То, что я хочу сделать, поддерживают этот процесс в рабочем состоянии все время и имеют что-то проверка, чтобы удостовериться, что это все еще работает. Если это не работает, я хочу, чтобы это запустилось.

Как это может быть сделано?

0
задан 21 July 2015 в 01:44

1 ответ

Этим вопросом могло бы быть лучшее пригодное для serverfault, видящего, как это по существу о типичных заданиях системного администратора, таких как управление процессами, а не что-либо конкретная Ubuntu, но так или иначе, ответ:

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

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

От той страницы:

[...] Это совместно использует некоторые из тех же целей программ как launchd, daemontools, и runit. В отличие от некоторых из этих программ, это не предназначено, чтобы быть выполненным вместо init как “идентификатор 1 процесса”. Вместо этого это предназначено, чтобы использоваться для управления процессами, связанными с проектом или клиентом, и предназначено для запуска как любая другая программа во время начальной загрузки.

На Ubuntu можно установить supervisord с sudo apt-get install supervisor. Затем создайте новый файл конфигурации в каталоге конфигурации супервизора (на Ubuntu, это /etc/supervisor/conf.d) и назовите его чем-то как pelican_watcher.conf ( .conf дополнительные вопросы)

[program:pelican_watcher]
directory=/directory/of/command
command=watch_regenerate.py
user=timbram
autostart=true
autorestart=true

Затем можно создать программу, которая просто наблюдает за изменениями и выполнениями make regenerate когда файл изменился (удостоверьтесь, что Вы добавляете свои собственные действительные значения для user, command, и directory, выше).

Этот сценарий Python использует watchdog пакет, чтобы уведомить Вас относительно изменений в каталоге и выполнить некоторую команду, когда файлы изменяются.

#!/usr/bin/env python2
import sys
import subprocess
import time

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

PELICAN_DIR = "/path/to/your/pelican/site"


class PelicanWatcher(FileSystemEventHandler):
    def on_modified(self, event):
        try:
            subprocess.check_call(['make', 'regenerate'])
        except subprocess.CalledProcessError:
            # You may want better logging here, such as sending mail or similar
            sys.stderr.write("an error occurred!")


if __name__ == '__main__':
    observer = Observer()
    event_handler = PelicanWatcher()
    observer.schedule(event_handler, PELICAN_DIR, recursive=True)

    observer.start()
    # Now sleep forever while watchdog does it's business
    while True:
        time.sleep(60)

Устанавливать сторожевой таймер, sudo apt-get install python-watchdog, затем, удостоверьтесь, что Вы редактируете поддельные пути, которые я вставил (PELICAN_DIR)

Затем поместите этот сценарий Python везде, где Вы указали в конфигурационном файле супервизора (watch_regenerate.py), сделайте это исполняемым файлом, и sudo supervisorctl reread && sudo supervisorctl update. Оттуда, supervisord перезапустит этот сценарий, если он неожиданно завершится и запустит процесс при начальной загрузке.

супервизор также имеет интерактивную команду, где можно осмотреть рабочие процессы: sudo supervisorctl без аргументов

readthedocs: http://super

0
ответ дан 1 October 2019 в 06:42

Другие вопросы по тегам:

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