このガイドに従ってno-ipダイナミックddnsをインストールしました: https://www.noip.com/support/knowledgebase/installing-the-linux-dynamic-update-client/
サービスを実行しています
Sudo /usr/local/bin/noip2
ただし、ブート時にサービスを開始したいので、次のスクリプトを/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
#######################################################
に続く:
Sudo chmod +x /etc/init.d/noip2.sh
Sudo update-rc.d noip2.sh defaults
これでサービスを開始できるはずです
Sudo service noip2 start
でも僕はそうじゃない。 journalctl -xe
を実行すると、次の結果が得られます。
-- 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
ユーザーPerDuckの更新情報:ソリューションの試行中に次のエラーが表示されます... :(追加を試行しました
RestartSec=30
少なくとも今は試行を続けていますが、まだ開始されません。まだSudo/usr/local/bin/noip2で起動できます
エラー:
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.
Ubuntu 15.04以降、バックグラウンドプロセス(およびその他の多く)を制御する標準的な方法はsystemd
です。 init.d
スクリプトからsystemd
nitに切り替えることをお勧めします。
次のコンテンツで/etc/systemd/system/noip2.service
ファイルを作成します(そしてinit.d
スクリプトをドロップします):
[Unit]
Description=noip2 service
[Service]
Type=forking
ExecStart=/usr/local/bin/noip2
Restart=always
[Install]
WantedBy=default.target
次に発行
Sudo systemctl daemon-reload
systemd
に新しいユニットを認識させる(systemd
はユニットファイルをキャッシュし、このコマンドはsystemd
にそのキャッシュを再検討させます)。
これで、nitを開始および停止して、そのステータスを確認できます。
Sudo systemctl status noip2
Sudo systemctl start noip2
Sudo systemctl status noip2
Sudo systemctl stop noip2
Sudo systemctl status noip2
起動時にユニットを起動するには、enable it:
Sudo systemctl enable noip2
起動時に自動起動を無効にするには、disableユニットを使用する必要があります。
Sudo systemctl disable noip2
ほとんどの場合、ユニットの動作を制御するには5つのコマンドで十分です。
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)
また、自動起動を有効にしてすぐにユニットを起動するか、自動起動を無効にして一度に停止することもできます。
systemctl enable --now $unit # enable and start in one go
systemctl disable --now $unit # disable and stop in one go
いくつかの研究では、noip2
がデーモンとして実行されることが明らかになりました。つまり、起動すると、バックグラウンド(いわゆるforking)およびフォアグラウンドプロセスはすぐに戻ります(終了)。それがinit.dスクリプトとsystemdユニットが失敗した理由です:それらはすぐに終了するのを見るためにnoip2
を開始しました。そのため、systemdは何度も何度も再起動を試みましたが、何の効果もありませんでした。 (デフォルトでは、systemdは10秒程度以内に最大5回プロセスを再起動してから、あきらめて失敗状態のままにします。)
Systemdにユニットのタイプを伝えるにはforking行を追加します
Type=forking
上記のスニペットで行ったように、[Service]
セクションに移動します。これは、systemdにexpectにすぐに戻るように指示しますが、代わりにnoip2
によって生成(分岐)されたプロセスを監視します。