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 :
| /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 :
| #! /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.
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
:
| PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
Merci à Cornichon qui m'a aidé sur l'IRC.
Pour ne pas à avoir à lancer nodejs en root :
| 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
|
Donc il faut ajouter un fichier node_monapp.sh dans le dossier node de utilisateur_g :
| #! /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.
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