Questão Processo Upstart listado como parada / espera


Eu tenho este script inicial

Quando eu corro: sudo start poxa inicia o processo mas quando eu corro: initctl list isso me mostra que é stop/waiting mas quando eu verifico ps aux | grep poxa mostra o processo.

E, como esperado, quando eu tentar pará-lo: sudo stop poxa retorna: stop: unknown instance:

# Upstart Configuration
# put on /etc/init
description     "Poxa"
author          "Poxa"

start on (filesystem or runlevel [2345])
stop on runlevel [!2345]

#respawn
#respawn limit 10 5
umask 022

console none

pre-start script
    test -x /home/ec2-user/poxa/rel/poxa/bin/poxa || { stop; exit 0; }
end script

pre-stop script
        echo "[`date -u +%Y-%m-%dT%T.%3NZ`] Stoping..." >> /var/log/poxa.log 2>&1
end script

script
        export HOME=/home/ec2-user
        echo "[`date -u +%Y-%m-%dT%T.%3NZ`] Starting..." >> /var/log/poxa.log 2>&1
        exec /home/ec2-user/poxa/rel/poxa/bin/poxa start >> /var/log/poxa.log 2>&1
end script

ps aux | grep poxa

root     29032  0.0  0.1  13656  1720 ?        S    11:42   0:00 /usr/local/lib/erlang/erts-7.0/bin/run_erl -daemon /home/ec2-user/poxa/rel/poxa/tmp/erl_pipes/poxa/ /home/ec2-user/poxa/rel/poxa/log exec "/home/ec2-user/poxa/rel/poxa/bin/poxa" "console"
root     29033  0.3  2.0 318992 21100 pts/1    Ssl+ 11:42   0:00 /usr/local/lib/erlang/erts-7.0/bin/beam -- -root /home/ec2-user/poxa/rel/poxa -progname home/ec2-user/poxa/rel/poxa/releases/0.4.3/poxa.sh -- -home /home/ec2-user -- -boot /home/ec2-user/poxa/rel/poxa/releases/0.4.3/poxa -boot_var ERTS_LIB_DIR /usr/local/lib/erlang/erts-7.0/../lib -config /home/ec2-user/poxa/rel/poxa/running-config/sys.config -pa /home/ec2-user/poxa/rel/poxa/lib/consolidated -name poxa@127.0.0.1 -setcookie
poxa -user Elixir.IEx.CLI -extra --no-halt +iex -- console

Eu fiz isso: http://upstart.ubuntu.com/cookbook/#how-to-establish-fork-count para obter a contagem de garfo, mas ele retorna 44!


4
2017-11-27 10:24


origem


O que o syslog tem em relação a esse processo? - PKumar
@PKumar eu não tenho instalado mas com ps aux | grep poxa Eu posso ver o processo em execução - Gerep
então o upstart não consegue rastrear o arquivo de log de verificação do pid enquanto inicia e interrompe o serviço - PKumar
@PKumar sim, esse é exatamente o problema e não tenho idéia do porque o upstart não está rastreando. O log é gerado corretamente quando eu corro sudo start poxa mas como ele não rastreia o PID eu não posso pará-lo, o upstart está considerando isso como um stopped trabalho. Talvez forçando um PID? - Gerep
@PKumar eu adicionei a saída ao verificar o poxa processo, como você pode ver, tem dois processos em execução - Gerep


Respostas:


O daemon do Upstart trabalha com três modos de daemon: no expect, expect fork, expect daemon, 6.13.5 Implicações de Misspecifying esperam

Como você pode ver lá, você precisa verificar a contagem do processo.

Se você inserir expect fork, a "exec /home/ec2-user/poxa/rel/poxa/bin/poxa start" processo precisa fork uma vez e exit. Também precisa fork duas vezes e exit para expect daemon. O iniciante vai trace aquele último filho pid.

Para executar o daemon corretamente com o script upstart, você precisa verificar fork do poxa processo.

A seguir, meu exemplo de daemon upstart e simple.

script upstart em /etc/init

# egservice - eg daemon
#
# This is an example
# upstart script.

description    "egservice"

start on runlevel [2345]
stop on runlevel [!2345]
#LOOK Following line, So egdaemon needs to fork just once.
expect fork
respawn

exec /sbin/egdaemon

egdaemon.c para /sbin/egdaemon

#include <stdio.h>

int main()
{
    /* LOOK following line, just once fork and main does not wait child and die, 
    so new child will be changed to a init's child and also a daemon. */
    int pid = fork();
    if (pid == 0) {
        while (1) {
            printf("Example daemon\n");
            sleep(1);
        }
    }
    return 0;
}

E esse arquivo-fonte C pode ser compilado em um binário executável com o seguinte comando.

$ gcc -o egdaemon egdaemon.c

5
2017-12-06 14:46





Você pode verificar se está adicionando expect fork( abaixo umask 022 linha) ajuda. Se o binário poxa for para segundo plano, isso ajudará o upstart a rastrear o pid.


0
2017-12-05 17:51