GNU/Linux >> Znalost Linux >  >> Ubuntu

Nemůžete získat službu Noip2 ke spuštění při spuštění?

Tato otázka zde již obsahuje odpovědi :Jak nastavím No-IP jako správnou službu?

(2 odpovědi)
Uzavřeno před 2 lety.

Nainstaloval jsem no-ip dynamické ddns podle tohoto průvodce:
https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/

Službu spustím pomocí

sudo /usr/local/bin/noip2

Nicméně chci, aby se služba spustila při startu, zkusil jsem přidat následující skript do /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
#######################################################

Následuje:

sudo chmod +x /etc/init.d/noip2.sh
sudo update-rc.d noip2.sh defaults

Nyní bych měl být schopen spustit službu pomocí

sudo service noip2 start

Ale já nejsem. Když spustím journalctl -xe Dostávám následující:

-- 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

Aktualizované informace pro uživatele PerDuck:
Při pokusu o vaše řešení se mi zobrazují následující chyby... 🙁
Pokus o přidání

RestartSec=30

Teď to alespoň zkouší, ale stále to nezačíná. Stále to mohu spustit pomocí sudo /usr/local/bin/noip2

Chyby:

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.

Přijatá odpověď:

Od Ubuntu 15.04 je standardní způsob ovládání procesů na pozadí (a mnohem, mnohem více) systemd .
Doporučuji přejít z vašeho init.d skript na systemd jednotka :

Vytvořte soubor /etc/systemd/system/noip2.service s následujícím obsahem (a pusťte svůj init.d skripty):

[Unit]
Description=noip2 service

[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always

[Install]
WantedBy=default.target

Poté vydejte

sudo systemctl daemon-reload

vytvořit systemd vědomi nové jednotky (systemd ukládá soubory jednotek do mezipaměti a tento příkaz vytvoří systemd přehodnotit jeho mezipaměť).

Nyní se můžete pokusit spustit a zastavit jednotku a podívejte se na jeho stav:

sudo systemctl status noip2
sudo systemctl start  noip2
sudo systemctl status noip2
sudo systemctl stop   noip2
sudo systemctl status noip2

Chcete-li, aby se jednotka spustila při spouštění, musíte ji povolit to:

sudo systemctl enable noip2

Chcete-li zakázat automatické spouštění při spouštění, musíte jej zakázat jednotka:

sudo systemctl disable noip2

K ovládání chování jednotek většinou stačí pět příkazů:

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)

Můžete také povolit autostart a spustit jednotku okamžitě nebo deaktivovat autostart a zastavit jej najednou:

systemctl enable  --now $unit   # enable and start in one go
systemctl disable --now $unit   # disable and stop in one go

Aktualizovat

Některé výzkumy odhalily noip2 běží jako démon , tj. když jej spustíte, vytvoří další proces, který běží na pozadí (tzv. forking ) a proces v popředí se okamžitě vrátí (ukončí). Proto selhal skript init.d a jednotka systemd:Spustili noip2 jen abych viděl, jak to okamžitě odchází. Proto se systemd pokoušel restartovat znovu a znovu bez úspěchu. (Ve výchozím nastavení systemd restartuje proces maximálně 5krát během přibližně 10 sekund, než se vzdá a ponechá jej ve stavu selhání.)

Související:Přesunutí domovské složky do nové instalace Ubuntu?

Abych systemd řekl, že jednotka je typu forking přidat řádek

Type=forking

do [Service] sekce, jak jsem to právě udělal ve úryvku výše. To říká systemd, aby očekával hlavní proces se okamžitě vrátí, ale místo toho sledujte proces vytvořený (rozvětvený) pomocí noip2 .


Ubuntu
  1. Vypršel časový limit služby Systemctl během spouštění?

  2. Server Vino Vnc nelze spustit při spuštění?

  3. Boot zaseknutý – jak spustit Gui z příkazového řádku?

  1. Nemůžete spustit aplikaci jako službu, ale běh jako samostatný proces prostě funguje?

  2. Nepodařilo se spustit komunitní server Thesql (5.7)?

  3. Nemůžete zprovoznit 3D Vision?

  1. Jak spustit Vnc Server při spuštění?

  2. Spring boot aplikace jako služba + možnosti VM

  3. Spusťte Ubuntu 16.04 do příkazového řádku / nespouštějte GUI