私はDebian 7 Wheezyを実行しています。完全に機能するインターネット接続が確立されたらすぐに、起動時にいくつかの画面を起動する必要があります。ただし、インターネット接続が切断され、再度接続された場合は、そうではありません。したがって、起動後の最初の機能的なインターネット接続でのみ。
このためのダミースクリプトを投稿して、それをどこに配置し、指定された条件下で実行できるようにしてください。
スクリプトは、画面を起動して終了するだけで済みますが、画面は続行する必要があります。
[〜#〜] edit [〜#〜]/etc/network/if-up.d/
フォルダ。しかし、インターネット接続が失われて再確立された場合に、スクリプトが再度実行されないようにするにはどうすればよいですか?
スクリプトを/etc/network/if-up.d
を実行可能にします。ネットワークインターフェイスが起動するたびに自動的に実行されます。
毎回の起動時に初めて実行するときにのみ機能するようにするには、最初に作成したフラグファイルの存在を確認してください。例:
#!/bin/sh
FLAGFILE=/var/run/work-was-already-done
case "$IFACE" in
lo)
# The loopback interface does not count.
# only run when some other interface comes up
exit 0
;;
*)
;;
esac
if [ -e $FLAGFILE ]; then
exit 0
else
touch $FLAGFILE
fi
: here, do the real work.
これは systemd
に非常に適しています。
システムが systemd を実行している場合は、スクリプトをsystemdサービスとして実行するように構成して、ライフサイクルと実行環境、およびネットワークの開始などのスクリプトを開始するための前提条件を制御できます。稼働しています。
独自のサービスに推奨されるフォルダーは/etc/systemd/system/
です(別のオプションは/lib/systemd/system
ですが、これは通常OOTBサービスのみに使用する必要があります)。
ファイルを作成します。 Sudo vim /etc/systemd/system/autossh.service
付き:
[Unit]
# By default 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|forking|oneshot|dbus|notify|idle
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=pkill -9 autossh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
これでサービスをテストできます:
Sudo systemctl start autossh
サービスのステータスの確認:
systemctl status autossh
サービスの停止:
Sudo systemctl stop autossh
サービスが期待どおりに機能することを確認したら、次のサービスを有効にします。
Sudo systemctl enable autossh
注:セキュリティ上の理由から、
systemd
は、crontab
スクリプトの実行方法と同様に、制限された環境でスクリプトを実行します。したがって、$ PATHなどの既存のシステム変数については想定しないでください。または、/.bashrc
、~/.zshrc
などにあるもの。スクリプトで特定の変数を定義する必要がある場合は、Environment
キーを使用します。 bashスクリプトの先頭にset -x
を追加してからsystemctl status my_service
を実行すると、スクリプトが失敗した理由を特定するのに役立つ場合があります。原則として、echo
を含むすべてに対して常に 絶対パス を使用するか、Environment=MYVAR=abc
を追加して$ PATHを明示的に定義します。
インターネット接続は、/etc/rc6.d/
のエントリによって起動されます。おそらくS35networking
です。そのファイルを変更してコマンドを最後に挿入するか、/etc/init.d/mystuff
を追加して/etc/rc0.d/S36mystuff
をリンクし、そこにコマンドを挿入すると、ネットワークが起動するとすぐに開始されます。