(2 réponses)
Fermé il y a 2 ans.
J'ai installé des ddns dynamiques sans ip en suivant ce guide :
https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/
Je fais fonctionner le service par
sudo /usr/local/bin/noip2
Cependant, je souhaite que le service démarre au démarrage, j'ai essayé d'ajouter le script suivant à /etc/init.d/noip2.sh
#######################################################
#! /bin/sh
# . /etc/rc.d/init.d/functions # uncomment/modify for your killproc
case "$1" in
start)
echo "Starting noip2."
/usr/local/bin/noip2
;;
stop)
echo -n "Shutting down noip2."
killproc -TERM /usr/local/bin/noip2
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
#######################################################
Suivi de :
sudo chmod +x /etc/init.d/noip2.sh
sudo update-rc.d noip2.sh defaults
Maintenant, je devrais pouvoir démarrer le service avec
sudo service noip2 start
Mais je ne suis pas. Lorsque j'exécute journalctl -xe
J'obtiens ceci :
-- Unit noip2.service has begun starting up.
Nov 03 12:36:11 media systemd[3111]: noip2.service: Failed to execute command: Exec format error
Nov 03 12:36:11 media systemd[3111]: noip2.service: Failed at step EXEC spawning /etc/init.d/noip2.sh: Exec format error
-- Subject: Process /etc/init.d/noip2.sh could not be executed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
--
-- The process /etc/init.d/noip2.sh could not be executed and failed.
--
-- The error number returned by this process is 8.
Nov 03 12:36:11 media systemd[1]: noip2.service: Control process exited, code=exited status=203
Nov 03 12:36:11 media systemd[1]: noip2.service: Failed with result 'exit-code'.
Nov 03 12:36:11 media systemd[1]: Failed to start noip2.service.
-- Subject: Unit noip2.service has failed
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
Informations mises à jour pour l'utilisateur PerDuck :
J'obtiens les erreurs suivantes en essayant votre solution… 🙁
J'ai essayé d'ajouter
RestartSec=30
Au moins, il continue d'essayer maintenant mais il ne démarre toujours pas. Je peux toujours le démarrer avec sudo /usr/local/bin/noip2
Les erreurs :
Nov 03 23:26:42 media systemd[1]: noip2.service: Service hold-off time over, scheduling restart.
Nov 03 23:26:42 media systemd[1]: noip2.service: Scheduled restart job, restart counter is at 5.
Nov 03 23:26:42 media systemd[1]: Stopped noip2 service.
Nov 03 23:26:42 media systemd[1]: noip2.service: Start request repeated too quickly.
Nov 03 23:26:42 media systemd[1]: noip2.service: Failed with result 'start-limit-hit'.
Nov 03 23:26:42 media systemd[1]: Failed to start noip2 service.
Réponse acceptée :
Depuis Ubuntu 15.04, le moyen standard de contrôler les processus d'arrière-plan (et bien plus encore) est systemd
.
Je suggère de passer de votre init.d
script à un systemd
unité :
Créez le fichier /etc/systemd/system/noip2.service
avec le contenu suivant (et déposez votre init.d
script):
[Unit]
Description=noip2 service
[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always
[Install]
WantedBy=default.target
Puis lancez
sudo systemctl daemon-reload
faire systemd
conscient de la nouvelle unité (systemd
met en cache les fichiers unitaires et cette commande rend systemd
reconsidérez son cache).
Vous pouvez maintenant essayer de démarrer et d'arrêter votre unité et voir son statut :
sudo systemctl status noip2
sudo systemctl start noip2
sudo systemctl status noip2
sudo systemctl stop noip2
sudo systemctl status noip2
Pour que l'unité démarre au démarrage, vous devez activer il :
sudo systemctl enable noip2
Pour désactiver le démarrage automatique au démarrage, vous devez désactiver l'unité :
sudo systemctl disable noip2
La plupart du temps cinq commandes suffisent pour contrôler le comportement d'une unité :
systemctl start $unit # starts a unit NOW
systemctl stop $unit # stops a unit NOW
systemctl status $unit # shows status
systemctl enable $unit # starts a unit at boot time (but not NOW)
systemctl disable $unit # stops autostart (but doesn't stop the unit NOW)
Vous pouvez également activer le démarrage automatique et démarrer l'unité immédiatement ou désactiver le démarrage automatique et l'arrêter immédiatement :
systemctl enable --now $unit # enable and start in one go
systemctl disable --now $unit # disable and stop in one go
Mettre à jour
Certaines recherches ont révélé le noip2
s'exécute en tant que démon , c'est-à-dire que lorsque vous le démarrez, il crée un autre processus qui s'exécute en arrière-plan (appelé forking ) et le processus de premier plan revient immédiatement (quitte). C'est pourquoi le script init.d et l'unité systemd ont échoué :ils ont démarré noip2
juste pour le voir sortir immédiatement. Par conséquent, systemd a essayé de le redémarrer encore et encore en vain. (Par défaut, systemd redémarre un processus au maximum 5 fois en 10 secondes environ avant d'abandonner et de le laisser en état d'échec.)
Pour indiquer à systemd que l'unité est de type forking ajouter la ligne
Type=forking
au [Service]
section comme je viens de le faire dans l'extrait ci-dessus. Cela indique à systemd de attendre le processus principal pour revenir immédiatement mais à la place regarder le processus engendré (forké) par noip2
.