Quando inicio manualmente meu próprio serviço, ele é executado em primeiro plano, correto?

3

Eu criei meu próprio serviço por:

  1. copiando meu binário para /usr/bin/mcp
  2. Crie um daemon copiando o esqueleto: /etc/init.d/skeleton
  3. Modifique o topo do script bash do skeleton:

    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Runs my Service"
    NAME=mcp
    DAEMON=/usr/bin/$NAME
    DAEMON_ARGS="-d f -c /etc/mcp"
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    

    Além disso, o esqueleto é exatamente o mesmo.

  4. Então eu crio o daemon:

    sudo update-rc.d -f mcp remove
    sudo update-rc.d mcp defaults 97 03
    

Quando executo o programa manualmente: mcp -d f -c /etc/mcp , ele funciona, mas nunca retorna, já que é um serviço que deve ser executado sempre. Isso é normal.

Mas agora, quando eu inicio como um serviço: sudo service mcp start , vejo o mesmo comportamento. Ou seja assim que eu entrar no comando start service, o programa é executado, mas agora o meu terminal está parado esperando pelo programa.

Eu pensei que se você executasse algo como um serviço, ele deveria estar sendo executado em segundo plano?

Também não posso interromper este serviço, a menos que eu abra um segundo terminal. Eu meio que quero que, quando eu iniciar o serviço, ele comece em algum lugar no fundo e você retorne à linha de comando. Estou fazendo algo errado aqui?

    
por code_fodder 10.08.2015 / 17:43

1 resposta

2

Não use um serviço init.d . Escreva um trabalho Upstart em vez disso. Veja um exemplo . O Upstart cuidará de manter o programa em segundo plano, registro, etc.

Seu serviço estaria em /etc/init/mcp.conf , contendo, por exemplo:

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

exec /usr/bin/mcp -d f -c /etc/mcp

Então você pode fazer:

sudo service mcp start
sudo service mcp stop

E assim por diante.

    
por muru 05.06.2016 / 23:07