スクリプトが実行される前にネットワークサービスが起動するのを待たないのはなぜですか?

スクリプトが実行される前にネットワークサービスが起動するのを待たないのはなぜですか?

私はDebian 8を使用しており、スクリプトを設定して以下のように/etc/init.dディレクトリに配置しました。デフォルトでは、起動時にSSHトンネルを開きたいと思います。

#! /bin/sh
# /etc/init.d/open_tunnels

### BEGIN INIT INFO
# Provides:          open_tunnels
# Required-Start:    $network $syslog $remote_fs
# Required-Stop:     $remote_fs $syslog 
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

case "$1" in
  start)
    echo "Running open_tunnels..."
    <ssh command>
    ;;
  stop)
    killall open_tunnels
    ;;
  *)
    echo "Usage: /etc/init.d/open_tunnels start"
    exit 1
    ;;
esac


exit 0

その後、サービスを追加しました。

insserv open_tunnels

ただし、システムを起動すると、システムログに次の情報が表示されます。

open_tunnels[522]: ssh: connect to host <IP> port 22: Network is unreachable

私のシステムでは(ログイン後)sshコマンドを使用しているので、sshコマンドが正しく機能すると確信しています。起動時に実行したいです。

ここで何か抜けましたか?

ベストアンサー1

読むhttps://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/その問題を徹底的に処理できるように。あなたの主な質問は次のとおりです。

正確に必要なもの$networkは明確ではなく、ローカル構成によって異なります。

Systemdは、上記のリンクで述べたように、より良いツールを提供します。基本的に、あなたは

[Unit]
Require = network-online.target
After = network-online.target

カスタムサービスファイルに追加し、ネットワーク管理サービスに良い結果を与えることを願っていますnetwork-online.target

initスクリプトをシステムサービスファイルに置き換えたくない場合は、ディレクトリを作成し、上記/etc/systemd/system/open_tunnels.service.dの3行を.confそのディレクトリのすべてのファイル(拡張子を含む)に配置します。これは、で説明されているように、systemdのSysV init互換層によって自動的に生成されるサービス記述を改善しますman systemd.unit

おすすめ記事