Lancer screen au démarrage (avec init.d)

Problème pour lancer nodejs au démarrage

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je souhaite lancer nodejs au démarrage du système. Cependant je n’arrive pas, la commande ’Screen’ ne semble pas s’exécuter au démarrage (via init.d).

Alors que quand je lance le script manuellement tout fonctionne très bien avec :

1
 /etc/init.d/screen.sh start

Ce qui me fait penser que Screen ne s’exécute pas, c’est le fait que je reçois que le premier mail, et que la session de Screen ne soit pas créée. :/ (Je ne reçois pas "[W] NODEJS LAUNCH").

/etc/init.d/screen.sh :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /bin/sh
### BEGIN INIT INFO
# Provides:          screen
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $network
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start screen session
# Description:       Enable screen session.
### END INIT INFO

echo "$1"|mail -s "SCREEN SESSION" g@gmail.com

case "$1" in
    start)
        echo "start"
        screen -dmS node /home/g/node/publinet.sh
        ;;
    stop)
        echo "stop"
        #screen -x node
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac

exit 0

/home/g/node/publinet.sh :

1
2
3
4
5
6
7
8
#! /bin/sh

echo "[1] = $(date '+%Y-%m-%d %H:%m:%S')"|mail -s "[W] NODEJS LAUNCH 1" g@gmail.com

cd /home/g/node/publinet
node /home/g/node/publinet/main.js

echo ":( 2"|mail -s "[W] NODEJS LAUNCH 2" g@gmail.com

Merci,

A-312.

+0 -0

La solution a été de mettre les chemins absolus.

whereis screen

whereis node

Puis ensuite remplacé dans le code : /usr/bin/screen -dmS node /home/g/node/publinet.sh

Et : /usr/local/bin/node /home/g/node/publinet/main.js

Ou sinon de définir la variable PATH :

1
PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Merci à Cornichon qui m'a aidé sur l'IRC. :D

+1 -0

Pour ne pas à avoir à lancer nodejs en root :

1
2
3
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port $mon_port

iptables -L -vt nat

(On remplace $mon_port par celui que vous souhaitez utiliser). Il peut-être utile d’utiliser iptables-save.

Version finale :

J’ai retenu cette version du script dans /etc/init.d/screen.sh.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#! /bin/sh
### BEGIN INIT INFO
# Provides:          screen
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $network
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start screen session
# Description:       Enable screen session.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

case "$1" in
    start)
        echo "start"
        cd /home/utilisateur_g/node
        for y in node_*.sh; do
            echo "open: +A_$y"
            su utilisateur_g -c "screen -dmS +A_$y /home/utilisateur_g/node/$y" 
        done
        ;;
    stop)
        echo "stop"
        cd /home/utilisateur_g/node
        for y in node_*.sh; do
            echo "kill: +A_$y"
            su utilisateur_g -c "screen -X -S +A_$y quit"
        done
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;
esac

exit 0
+0 -1

Donc il faut ajouter un fichier node_monapp.sh dans le dossier node de utilisateur_g :

1
2
3
4
5
6
#! /bin/sh

echo "ok l'app démarre" | mail -s "ok" "g@gmail.com"

cd /home/utilisateur_g/node/monapp
node /home/utilisateur_g/node/monapp/index.js

Le dossier ~/utilisateur_g/node/ peut avoir autant de fichier node_xxxx.sh qu’il y a d’application :

  • node_monapp1.js
  • node_monapp2.js

Puis si je souhaite éteindre tous les apps, je passe en root puis service screen.sh stop. Pour les fermer un par un, voir la doc de screen.

+0 -1
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte