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
!
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
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.