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

Problème pour lancer nodejs au démarrage

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

Édité par A-312

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // :B // L’hiver vient // @**A-312** pour me ping

+0 -0
Auteur du sujet

Cette réponse a aidé l’auteur du sujet

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

Édité par A-312

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // :B // L’hiver vient // @**A-312** pour me ping

+1 -0
Auteur du sujet

Cette réponse a aidé l’auteur du sujet

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

Édité par A-312

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // :B // L’hiver vient // @**A-312** pour me ping

+0 -1
Auteur du sujet

Cette réponse a aidé l’auteur du sujet

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.

Édité par A-312

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // :B // L’hiver vient // @**A-312** pour me ping

+0 -1
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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