Deixe os usuários criarem seus próprios daemons

2

Como posso permitir que os usuários do servidor criem seus próprios daemons? Eles devem iniciar automaticamente na inicialização e se comportar como os daemons comuns, mas com privilégios inferiores em geral.

Lembro-me de ter visto uma ferramenta que permite ao usuário criar um arquivo em formato semelhante a um crontab com seus desejos. A ferramenta certificava-se de que os programas do arquivo estivessem em execução a qualquer momento . Mas agora não foi possível encontrar o nome dele.

nohup ./app & só não corta porque não será iniciado automaticamente e o aplicativo não será reiniciado automaticamente. O mesmo que @reboot no usuário crontab .

O problema é que não quero reinventar uma roda. Se há algo que faz o que eu quero na íntegra, eu usaria isso. E somente se não houver nada, eu recorria a uma abordagem feita à mão.

(Eu estou usando Debian estável, então eu não tenho o systemd ainda, pelo que entendi).

    
por sanmai 13.03.2014 / 08:56

2 respostas

3

Certifique-se de que os diretórios home dos usuários estejam acessíveis no início (antes do início do cron) e faça com que eles façam uma entrada no crontab:

@reboot /home/username/bin/start_at_boot

Isso é um recurso padrão de um daemon do cron que deve estar no seu Sistema Debian.

O start_at_boot script pode iniciar os daemons do usuário diretamente ou iniciar alguma ferramenta que gerencia e observa os daemons dos usuários (cuja configuração pode estar sob o controle do usuário individual). Eu usei vários pacotes para isso, por exemplo procer que vem com mongrel2 . Mas agora tendem a usar o supervisor (estar em python facilita o entendimento e a extensão assim que surge a necessidade disso).

Para outro agendamento (ou o kick de um daemon inativo em atividade), os usuários podem fazer entradas normais em seu próprio crontab.

    
por 13.03.2014 / 09:44
2

Se você está no systemd, é trivial, porque o systemd não requer o formalismo "fork / exec / pidfile". Você acabou de criar um arquivo de serviço e o systemd se encarrega de iniciar o processo, reiniciar uma instância travada e assim por diante. Você também pode facilmente permitir que os usuários criem seus próprios arquivos de serviço (ou até executá-los não como root, mas como seu próprio usuário - se isso for útil de alguma forma).

Nos scripts do sistema V, a maneira mais padrão é iniciá-los em /etc/rc.local . A reinicialização automática geralmente não funciona nem para os daemons do sistema! No entanto, você poderia escrever um wrapper de shell que executa o processo em um loop (possivelmente com um sleep 1 para evitar problemas com processos em constante falha). No entanto, neste sistema, você tem muito pouco controle sobre daemons individuais.

Você também pode criar initscripts e colocá-los em um diretório especial acessível pelo usuário no rc.d e modificar o sistema de inicialização do serviço.

    
por 13.03.2014 / 09:04