it-swarm.com.de

Upstart-Prozess als Stopp / Warten aufgeführt

Ich habe dieses Upstart-Skript

Wenn ich: Sudo start poxa starte, wird der Prozess gestartet, aber wenn ich: initctl list starte, wird angezeigt, dass es sich um stop/waiting handelt, aber wenn ich ps aux | grep poxa überprüfe, wird der Prozess angezeigt.

Und, wie erwartet, wenn ich versuche, es zu stoppen: Sudo stop poxa es gibt zurück: 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

Ich habe dies gemacht: http://upstart.ubuntu.com/cookbook/#how-to-establish-fork-count um die Gabelzählung zu erhalten, aber es gibt 44 zurück!

4
Gerep

Der Upstart-Daemon arbeitet mit drei Daemon-Modi: no expect, expect fork, expect daemon, 6.13.5 Auswirkungen einer fehlerhaften Angabe erwarten

Wie Sie dort sehen können, müssen Sie die Anzahl der Prozessgabeln überprüfen.

Wenn Sie expect fork einfügen, muss der Prozess "exec /home/ec2-user/poxa/rel/poxa/bin/poxa start" einmal fork und exit. Außerdem muss es zweimal fork und exit für expect daemon sein. Der Emporkömmling wird das letzte Kind pid trace.

Um den Daemon korrekt mit dem Upstart-Skript auszuführen, müssen Sie den Prozess fork von poxa überprüfen.

Das Folgende ist mein Beispiel für Upstart und einfachen Daemon.

start-Skript in /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 für /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;
}

Und diese C-Quelldatei kann mit folgendem Befehl zu einer ausführbaren Binärdatei kompiliert werden.

$ gcc -o egdaemon egdaemon.c
5
xiaodongjie

Sie können prüfen, ob das Hinzufügen von expect fork (unter umask 022) hilfreich ist. Wenn die Pocken-Binärdatei in den Hintergrund wechselt, sollte dies den Start erleichtern, um die PID zu verfolgen.

0
Łukasz