web-dev-qa-db-fra.com

Processus de démarrage répertorié comme arrêt / attente

J'ai ce script parvenu

Quand je lance: Sudo start poxa il démarre le processus mais quand je lance: initctl list il me montre que c'est stop/waiting mais lorsque je vérifie ps aux | grep poxa il affiche le processus.

Et, comme prévu, lorsque j'essaie de l'arrêter: Sudo stop poxa, il renvoie: 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 [email protected] -setcookie
poxa -user Elixir.IEx.CLI -extra --no-halt +iex -- console

J'ai fait ceci: http://upstart.ubuntu.com/cookbook/#how-to-establish-fork-count pour obtenir le nombre de fork, mais il retourne 44!

4
Gerep

Le démon Upstart fonctionne avec trois modes de démon: no expect, expect fork, expect daemon, 6.13.5 Implications de l'attente de spéculation incorrecte

Comme vous pouvez le voir, vous devez vérifier le nombre de processus de processus.

Si vous insérez expect fork, le processus "exec /home/ec2-user/poxa/rel/poxa/bin/poxa start" doit passer à fork une fois et exit. De plus, il faut que fork deux fois et exit pour expect daemon. Le parvenu va trace ce dernier pid enfant.

Pour exécuter le démon correctement avec le script upstart, vous devez vérifier le processus fork de poxa.

Voici mon exemple pour le démon débutant et simple.

script de démarrage dans /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 pour /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;
}

Et ce fichier source C peut être compilé en un exécutable binaire avec la commande suivante.

$ gcc -o egdaemon egdaemon.c
5
xiaodongjie

Vous pouvez vérifier si l'ajout de expect fork (sous la ligne umask 022 _) est utile. Si le binaire de la poxa passe en arrière-plan, cela devrait vous aider à suivre le pid.

0
Łukasz