У меня есть VPS Ubuntu 14.04, который размещает один из моих сайтов, который динамично сгенерирован, пользуясь Библиотекой Пеликана Python. Существует, "делают, повторно создают" команду, которую я могу выполнить, который автоматически проверит на изменения в исходных файлах и когда она найдет их, она автоматически повторно создаст HTML с новыми изменениями.
Это работает отлично, когда я зарегистрирован в VPS, и позволяющий это обрабатывает для выполнения в терминале, но когда я выхожу из системы, он останавливается.
То, что я хочу сделать, поддерживают этот процесс в рабочем состоянии все время и имеют что-то проверка, чтобы удостовериться, что это все еще работает. Если это не работает, я хочу, чтобы это запустилось.
Как это может быть сделано?
Этим вопросом могло бы быть лучшее пригодное для 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