私はDebian 7 Wheezyを実行しており、インターネットに完全に接続したら起動時に起動する画面が必要です。ただし、インターネット接続が中断されて再接続される場合は、この限りではありません。したがって、起動後初めて利用可能なインターネット接続でのみ可能です。
これのダミースクリプトを公開し、それをどこに配置し、特定の条件で実行することができますか?
スクリプトは画面を起動してから終了するだけですが、画面は続行する必要があります。
編集する
このフォルダについて聞きました/etc/network/if-up.d/
。しかし、インターネット接続が切断され再接続された場合にスクリプトが再実行されないようにするにはどうすればよいですか?
答え1
スクリプトを入れて/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.
答え2
非常に適した職業ですsystemd
。
スクリプトをシステムサービスとして実行する
システムが稼働している場合システムその後、ライフサイクルと実行環境を制御するだけでなく、ネットワークの起動と実行、失敗時の再起動など、スクリプトを起動するための前提条件を提供するシステムサービスとして実行するようにスクリプトを設定できます。
あなたのサービスに推奨されるフォルダは次のとおりです。/etc/systemd/system/
別のオプションはありますが、/lib/systemd/system
通常はOOTBサービスでのみ使用する必要があります。
次のファイルを作成しますsudo vim /etc/systemd/system/autossh.service
。
[Unit]
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
# By default type 'simple' is used, see also https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
# Type=simple|exec|forking|oneshot|dbus|notify|idle
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
キー(スクリプトが特定の変数を定義する必要がある場合)。set -x
Bashスクリプトの上部に追加して実行すると、systemctl status my_service
スクリプトが失敗した理由を特定するのに役立ちます。原則として常に使用してください。絶対パスすべてのものを追加するecho
か、$ PATHを明示的に定義しますEnvironment=MYVAR=abc
。
答え3
/etc/rc6.d/
インターネット接続はの項目から始めることができますS35networking
。ファイルを変更して最後にコマンドを挿入するか、ファイルを追加してファイルにリンクしてからコマンドを挿入すると、ネットワークが起動するとすぐに/etc/init.d/mystuff
操作が開始されます。/etc/rc0.d/S36mystuff