Script de inicialização e start-stop-daemon

8

Eu tive um problema em que criar um script inicial chamaria o script várias vezes, fazendo com que meu IRCd aparecesse cerca de 8 vezes. Para corrigir isso, usei start-stop-daemon:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn

nice -5

exec start-stop-daemon --start --chuid ircuser --chdir /home/ircuser/inspircd/run --exec /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

Isso funciona exatamente como eu quero, exceto que:

stop ircd

diz que o interrompe, mas o inspircd ainda está sendo executado depois.

Existe uma maneira melhor do que usar o start-stop-daemon que impedirá o script de abrir 8 instâncias ou existe alguma maneira de torná-lo compatível com o start-stop-daemon?

Liam Dawson
fonte

Respostas:

6

Não tenho certeza, mas o inspircd pode estar surgindo quando é executado, para que o Upstart não saiba onde está seu PID. Se for esse o caso, ele pode ser corrigido porque o Upstart possui duas estrofes para lidar com os processos de bifurcação:

  • expect fork captura processos que bifurcam uma vez (imo, provavelmente o caso aqui).
  • expect daemonpega coisas que se desenrolam duas vezes ... O que isso pode estar fazendo.

Então tente o seguinte:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn
expect fork

nice -5

exec su bash -c "cd /home/ircuser/inspircd/run; /home/ircuser/inspircd/run/bin/inspircd -- --config=./conf/inspircd.conf" ircuser

E se isso não funcionar, verifique minha sudeclaração para garantir que funcione na linha de comando e mude expect forkpara expect daemone dê outro giro.


Editar o bashwrapper pode estar fazendo mais mal do que bem. Este pode ser um executivo melhor:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf
Oli
fonte
Obrigado! Funciona de forma mais ordenada e, sim, expect forkcorrigiu o problema. No entanto, ainda não consigo chamar 'stop ircd' e o script é interrompido. No entanto, vou gerenciar sem ele (aux ps, kill), mas se você pode alterar sua resposta para incluir uma maneira de fazer isso, eu vou ser um usuário muito feliz Ubuntu;)
Liam Dawson
Hmm - quando você o executa sudo start ircd, deve gerar um PID. Se você colocar isso no final de ps(por exemplo ps u -p <PID>:), isso mostra um processo que faz sentido? Se ele não está ainda perder o controle do PID de modo que você pode querer tentarexpect daemon
Oli
Na verdade, ele não gera um PID, apenas uma saída do console. Oh bem, ps aux, kill <pid>funciona bem, eu estava mais preocupado em fazer o script de inicialização na inicialização, o que ele faz. Obrigado!
Liam Dawson