Pourquoi mon script init.d start-stop-daemon n'a-t-il pas démarré l'application au démarrage, mais je peux démarrer le service manuellement?
-
28-10-2019 - |
Question
Je pensais avoir finalement réussi à écrire correctement mon premier script init.d mais quand je suis allé redémarrer, le lancement n'a pas eu lieu.Le script start-foo
ressemble à ceci:
#! /bin/sh
# chkconfig 345 85 60
# description: startup script for foo
# processname: foo
NAME=foo
DIR=/etc/foo/services
EXEC=foo.py
PID_FILE=/var/run/foo.pid
IEXE=/etc/init.d/foo
RUN_AS=root
### BEGIN INIT INFO
# Provides: foo
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 5
# Default-Stop: 0 1 2 3 6
# Description: Starts the foo service
### END INIT INFO
if [ ! -f $DIR/$EXEC ]
then
echo "$DIR/$EXEC not found."
exit
fi
case "$1" in
start)
echo -n "Starting $NAME"
cd $DIR
start-stop-daemon -d $DIR --start --background --pidfile $PID_FILE --make-pidfile --exec $EXEC --quiet
echo "$NAME are now running."
;;
stop)
echo -n "Stopping $NAME"
kill -TERM `cat $PID_FILE`
rm $PID_FILE
echo "$NAME."
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Use: /etc/init.d/$NAME {start|stop|restart|force-reload}"
exit 1
;;
esac
exit 0
foo.py
nécessite sudo pour ouvrir les ports.Je suppose que ce n'est pas un problème puisque d'autres services (comme apache ) doit avoir besoin de la même chose.J'ai un makefile qui fait ce qui suit:
make install:
chmod +x start-foo
cp start-foo /etc/init.d
Si j'exécute sudo service start-foo start
, cela fonctionne.Pourtant, lorsque je redémarre, il ne démarre pas automatiquement.Que me manque-t-il?
La solution
Vous avez le lien entre le script et les différents répertoires init au niveau de l'exécution.Essayez chkconfig start-foo on
pour activer cela, en supposant que votre box ait installé chkconfig.Sinon, vous devez placer manuellement des liens symboliques dans le répertoire d'initialisation de chaque niveau d'exécution pointant vers le script.
Autres conseils
Essayez de l'ajouter aux niveaux d'exécution nécessaires en utilisant chkconfig
# chkconfig foo on
vous devrez peut-être faire
# chkconfig --add foo
d'abord
Vous avez besoin de liens symboliques dans les différents répertoires /etc/rc.x.
update-rc.d start-foo defaults
Cela créera les liens symboliques pour vous.Et pour les supprimer:
update-rc.d start-foo remove
http://manpages.ubuntu.com/manpages/precise/man8/update-rc.d.8.html
Cela peut avoir quelque chose à voir avec l'ordre dans lequel vous essayez de le démarrer.Si vous avez besoin de démarrer d'autres services avant que votre script ne puisse s'exécuter, vous devriez essayer de le pousser plus bas dans l'ordre d'exécution.