Upstart cria dois processos em vez de um

2

Estou tentando criar um serviço de eco simples usando o upstart do Ubuntu.

Por algum motivo, o upstart se comporta de maneira realmente estranha. Quando ele inicia o echo server pela primeira vez, tudo está ok, mas quando ele começa em segundo, terceiro, etc, ele cria dois processos.

Não é fork e não é daemon.

Por favor, dê uma olhada no exemplo abaixo. Eu li quase todas as documentações recentes e não entendo o que isso significa. Eu agradeceria por qualquer ajuda.

root@z-server:~# cat /etc/init/echoservice.conf
exec ncat -l 7 -k -e "/bin/cat"
root@z-server:~#
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1383
root@z-server:~#
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1383  0.0  0.0  17348  1328 ?        Ss   22:11   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~# stop echoservice
echoservice stop/waiting
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1401
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1401  0.0  0.0   4440   624 ?        Ss   22:12   0:00 /bin/sh -e -c ncat -l 7 -k -e "/bin/cat" /bin/sh
root      1402  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~#
root@z-server:~# stop echoservice
echoservice stop/waiting
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1411
root@z-server:~#
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1411  0.0  0.0   4440   628 ?        Ss   22:12   0:00 /bin/sh -e -c ncat -l 7 -k -e "/bin/cat" /bin/sh
root      1412  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~# kill -9 1411
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1412  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
root@z-server:~# initctl status echoservice
echoservice stop/waiting
root@z-server:~#
root@z-server:~# start echoservice
echoservice start/running, process 1421
root@z-server:~#
root@z-server:~# ps aux | grep -v grep | grep -i ncat
root      1412  0.0  0.0  17348  1324 ?        S    22:12   0:00 ncat -l 7 -k -e /bin/cat
root@z-server:~#
    
por zeroed 14.07.2013 / 07:16

1 resposta

3

Tente eliminar as aspas em torno de /bin/cat . Então faça:

exec ncat -l 7 -k -e /bin/cat

A razão pela qual digo isso é que a documentação diz:

  

Quaisquer caracteres especiais, por ex. Aspas ou '$' especificado resultarão em todo o comando sendo passado para um shell para expansão.

Neste caso, não há necessidade de chamar o comando via shell, então vamos simplificar para que você não use o shell.

Se você quiser usar o shell, use explicitamente uma regra script ... end script e use explicitamente um comando exec do shell.

Não sei por que você está tendo o seu comportamento original, mas acho que você pode consertá-lo evitando o uso de um shell em primeiro lugar.

    
por Robie Basak 14.07.2013 / 10:10