(2 Antworten)
Vor 2 Jahren geschlossen.
Ich habe dynamische No-IP-DDNs gemäß dieser Anleitung installiert:
https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/
Ich bekomme den Dienst zum Laufen von
sudo /usr/local/bin/noip2
Ich möchte jedoch, dass der Dienst beim Booten gestartet wird. Ich habe versucht, das folgende Skript zu /etc/init.d/noip2.sh
hinzuzufügen#######################################################
#! /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
#######################################################
Gefolgt von:
sudo chmod +x /etc/init.d/noip2.sh
sudo update-rc.d noip2.sh defaults
Jetzt sollte ich den Dienst mit
starten könnensudo service noip2 start
Aber ich bin es nicht. Wenn ich journalctl -xe
ausführe Ich bekomme folgendes:
-- 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
Aktualisierte Informationen für Benutzer PerDuck:
Ich erhalte die folgenden Fehler beim Versuch Ihrer Lösung… 🙁
Hinzufügen versucht
RestartSec=30
Zumindest versucht er es jetzt immer wieder, aber er startet immer noch nicht. Ich kann es immer noch mit sudo /usr/local/bin/noip2
startenDie Fehler:
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.
Akzeptierte Antwort:
Seit Ubuntu 15.04 ist systemd
die Standardmethode zur Steuerung von Hintergrundprozessen (und vielem mehr). .
Ich schlage vor, von Ihrer init.d
zu wechseln Skript zu einem systemd
Einheit :
Erstellen Sie die Datei /etc/systemd/system/noip2.service
mit folgendem Inhalt (und legen Sie Ihre init.d
ab Skripte):
[Unit]
Description=noip2 service
[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always
[Install]
WantedBy=default.target
Dann ausgeben
sudo systemctl daemon-reload
um systemd
zu erstellen Kenntnis der neuen Einheit (systemd
speichert Unit-Dateien und dieser Befehl macht systemd
den Cache überdenken).
Jetzt können Sie versuchen, Ihr Gerät zu starten und zu stoppen und seinen Status sehen:
sudo systemctl status noip2
sudo systemctl start noip2
sudo systemctl status noip2
sudo systemctl stop noip2
sudo systemctl status noip2
Damit das Gerät beim Booten gestartet wird, müssen Sie es aktivieren es:
sudo systemctl enable noip2
Um den Autostart beim Booten zu deaktivieren, müssen Sie deaktivieren die Einheit:
sudo systemctl disable noip2
Meistens reichen fünf Befehle aus, um das Verhalten einer Einheit zu steuern:
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)
Sie können auch den Autostart aktivieren und das Gerät sofort starten oder den Autostart deaktivieren und sofort stoppen:
systemctl enable --now $unit # enable and start in one go
systemctl disable --now $unit # disable and stop in one go
Aktualisieren
Einige Recherchen ergaben noip2
läuft als Daemon , d.h. wenn Sie es starten, erstellt es einen anderen Prozess, der im Hintergrund läuft (sog. forking ) und der Vordergrundprozess kehrt sofort zurück (beendet). Deshalb sind das init.d-Skript und die systemd-Unit fehlgeschlagen:Sie haben noip2
gestartet nur um zu sehen, dass es sofort beendet wird. Daher hat systemd immer wieder vergeblich versucht, es neu zu starten. (Standardmäßig startet systemd einen Prozess höchstens 5 Mal innerhalb von etwa 10 Sekunden neu, bevor er aufgibt und ihn im fehlgeschlagenen Zustand belässt.)
Um systemd mitzuteilen, dass die Unit vom Typ forking ist Zeile hinzufügen
Type=forking
zum [Service]
Abschnitt, wie ich es gerade im obigen Snippet getan habe. Dies weist systemd an, zu erwarten dass der Hauptprozess sofort zurückkehrt, aber stattdessen den von noip2
erzeugten (gegabelten) Prozess beobachtet .