Ubuntu 14.04 VPS - Como manter o processo rodando em background e periodicamente se certificar de que ele ainda está rodando

0

Eu tenho um Ubuntu 14.04 VPS que hospeda um dos meus sites que é gerado dinamicamente usando a Pelican Library do Python. Existe um comando "make regenerate" que posso executar para verificar automaticamente as alterações nos arquivos de origem e, quando os encontrar, ele irá automaticamente gerar novamente o HTML com as novas alterações.

Isso funciona muito bem quando estou logado no VPS e permitindo que esses processos sejam executados no terminal, mas quando eu efetuo logout ele para.

O que eu quero fazer é manter esse processo em execução o tempo todo e ter algo para verificar se ele ainda está em execução. Se não estiver funcionando, quero que ele comece.

Como isso pode ser feito?

    
por timbram 21.07.2015 / 00:44

1 resposta

0

Esta questão pode ser a melhor opção para o serverfault visto que é essencialmente sobre trabalhos típicos de sysadmin como o gerenciamento de processos, ao invés de qualquer coisa específica do Ubuntu, mas de qualquer maneira uma resposta:

O que você está essencialmente falando é um processo daemon - que é um processo iniciado e monitorado pelo sistema operacional e reiniciado em caso de falha.

Você pode usar um script init do sistema para isso, mas pode haver muitos problemas sutis de gerenciamento com scripts de inicialização, e já existe uma solução melhor e mais fácil. Eu recomendaria altamente supervisord

A partir dessa página:

[...] It shares some of the same goals of programs like launchd, daemontools, and runit. Unlike some of these programs, it is not meant to be run as a substitute for init as “process id 1”. Instead it is meant to be used to control processes related to a project or a customer, and is meant to start like any other program at boot time.

No Ubuntu, você pode instalar o supervisord com sudo apt-get install supervisor . Em seguida, crie um novo arquivo de configuração no diretório de configuração do supervisor (no Ubuntu, isso é /etc/supervisor/conf.d ) e nomeie-o como pelican_watcher.conf (a extensão .conf é importante)

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

Em seguida, você pode criar um programa que simplesmente observe as alterações e execute make regenerate quando um arquivo for alterado (certifique-se de adicionar seus próprios valores reais para user , command e directory acima ).

Este script python usa o pacote watchdog para notificá-lo de alterações em um diretório e executar algum comando quando os arquivos forem alterados.

#!/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)

Para instalar o watchdog, sudo apt-get install python-watchdog , certifique-se de editar os caminhos falsos que eu coloquei em ( PELICAN_DIR )

Em seguida, coloque este script python onde quer que você tenha especificado no arquivo de configuração do supervisor ( watch_regenerate.py ), torne-o executável e sudo supervisorctl reread && sudo supervisorctl update . A partir daí, o supervisord reiniciará esse script se ele terminar inesperadamente e iniciará o processo na inicialização.

O

supervisor também possui um comando interativo no qual você pode inspecionar os processos em execução: sudo supervisorctl sem argumentos

readthedocs: link

    
por user443642 26.08.2015 / 18:11

Tags