
私は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
。