(2 risposte)
Chiuso 2 anni fa.
Ho installato ddns dinamici no-ip seguendo questa guida:
https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/
Ottengo il servizio in esecuzione da
sudo /usr/local/bin/noip2
Comunque voglio che il servizio si avvii all'avvio, ho provato ad aggiungere il seguente script a /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
#######################################################
Seguito da:
sudo chmod +x /etc/init.d/noip2.sh
sudo update-rc.d noip2.sh defaults
Ora dovrei essere in grado di avviare il servizio con
sudo service noip2 start
Ma non lo sono. Quando eseguo journalctl -xe
Ottengo quanto segue:
-- 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
Informazioni aggiornate per l'utente PerDuck:
Ottengo i seguenti errori provando la tua soluzione... 🙁
Ho provato ad aggiungere
RestartSec=30
Almeno continua a provare ora ma non si avvia ancora. Posso ancora avviarlo con sudo /usr/local/bin/noip2
Gli errori:
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.
Risposta accettata:
Da Ubuntu 15.04 il modo standard per controllare i processi in background (e molto altro ancora) è systemd
.
Suggerisco di passare dal tuo init.d
script in un systemd
unità :
Crea il file /etc/systemd/system/noip2.service
con il seguente contenuto (e rilascia il tuo init.d
script):
[Unit]
Description=noip2 service
[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always
[Install]
WantedBy=default.target
Quindi emetti
sudo systemctl daemon-reload
per creare systemd
a conoscenza della nuova unità (systemd
memorizza nella cache i file unit e questo comando rende systemd
riconsiderare la sua cache).
Ora puoi provare ad avviare e arrestare la tua unità e vedere il suo stato:
sudo systemctl status noip2
sudo systemctl start noip2
sudo systemctl status noip2
sudo systemctl stop noip2
sudo systemctl status noip2
Per avviare l'unità all'avvio è necessario abilitare esso:
sudo systemctl enable noip2
Per disabilitare l'avvio automatico all'avvio è necessario disabilitare l'unità:
sudo systemctl disable noip2
Il più delle volte cinque comandi sono sufficienti per controllare il comportamento di un'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)
È inoltre possibile abilitare l'avvio automatico e avviare l'unità immediatamente o disabilitare l'avvio automatico e interromperla immediatamente:
systemctl enable --now $unit # enable and start in one go
systemctl disable --now $unit # disable and stop in one go
Aggiorna
Alcune ricerche hanno rivelato il noip2
viene eseguito come un demone , ovvero quando lo avvii, crea un altro processo che viene eseguito in background (il cosiddetto forking ) e il processo in primo piano ritorna immediatamente (esce). Ecco perché lo script init.d e l'unità systemd hanno fallito:hanno avviato noip2
solo per vederlo esce subito. Quindi, systemd ha provato a riavviarlo più e più volte senza alcun risultato. (Per impostazione predefinita, systemd riavvia un processo al massimo 5 volte entro 10 secondi circa prima di arrendersi e lasciarlo in uno stato di errore.)
Per dire a systemd l'unità è di tipo forking aggiungi la riga
Type=forking
al [Service]
sezione come ho appena fatto nello snippet sopra. Questo dice a systemd di aspettarsi il processo principale per tornare immediatamente ma invece guardare il processo generato (biforcato) da noip2
.