web-dev-qa-db-ja.com

すべてが稼働しているときにスクリプトを開始する方法

ルーティング用のPCを持っています。2つのネットワークインターフェイスがあり、Debianを実行しています。起動して問題がないことを示すために、サウンドを追加したいと思います。

ですから、トップシークレット LSByizationマニュアル に従って、いくつかの/etc/init.s/beep-startupスクリプトを作成しました(その名前の遅延を停止できません、申し訳ありません)。 (数百のLSB文字列とともに)いくつかのコアコマンドが含まれています。

### BEGIN INIT INFO
# Provides:          beep-startup
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: qwer
# Description:       asdf
### END INIT INFO
case "$1" in
  start)
    #power chord + extreme uprising = fells like its clearly up and feeing good
    beep -f 220 -l 100
    beep -f 330 -l 100
    beep -f 880 -l 100
    ;;
  stop)
    # power chord + slow chirp down, feels like low descending shutdown sound, right after ctrl+alt+del or /sbin/reboot
    beep -f 440 -l 100
    beep -f 330 -l 100
    beep -f 220 -l 100
    ;;
  *)
    echo "Usage: Sudo rm / -rf"
esac

その後、もちろんchmod +xupdate-rc.d beep-startup defaultsを実行しました

しかし、ここでの秘訣は、実際に動作しているときにシステムが起動プロセス中にビープ音が鳴っているが、ログインプロンプトがポップアップしているときではないということです。したがって、ビープ音とログインプロンプトの間には2〜3秒あります。そして、チャープサウンドと正しいルーティングの間のほぼ5〜7秒が始まります(4コア* 2 GHz + 4 GB DDR3 RAM、ルーターとしてはそれほど悪くありません)シャットダウンビープ音は魅力的で、Ctrl + Alt + Delのコンボの直後にすぐに発生します。 「シャットダウンシーケンス開始」を確認するはずだったので。

ログインプロンプトが表示される前に、歌詞を "ナノ秒"にbeepしたいと思います。 $all#everything(または、何を書き込むかは正確にわかります)が本当に初期化され、システムがログインプロンプトを表示する準備ができた後。システムですべての処理が完了した直後に、ログインプロンプトが表示される直前に実行される自動実行スクリプトを作成するにはどうすればよいですか?


PS。ちょっと気になりますが、これはコンソールのみの機能を備えたルーターであり、xorgなどはありません。必要なユーザーはrootだけで、そのタスクのほとんどはrootに関連しています。システムは「初期化」、「実行中」、「シャットダウン」、「電源オフ」のいずれでも可能です-ランレベルは必要ありません。 Debianはその種のディストリビューションでは実際のゴミです。ランレベルレス Busybox init は、その意味で非常に「セクシー」に感じます。後で私はbuildrootのようなディストリビューションを支持して重いDebianを取り除くことを計画しています。しかし、それは本番環境でのみ発生します。必要なソフトウェアを安定させて理解した後でのみです。今のところ、開発やソフトウェアのユーザビリティテストの段階で、apt-kindの「ランタイム」パッケージ追加の可能性が好きです。今では、iptablesで素晴らしい経験をし、shorewall + webminで最悪の経験をしました。最初のブロックが2番目にブロックされ、dnsmasqがブロックされ、WAN全体がブロックされました。 _接続など。よりユーザーフレンドリーなソリューションが見つかることを願っています。とりあえずの質問は、「/etc/init.dのすべてが起動して動作した後でスクリプトを実行する」というものです。

5
xakepp35

ここで優れたソリューション。解決策1:crontabに@rebootエントリを作成して、/ usr/local/bin/runonceというスクリプトを実行します。

Mkdir -pを使用して、/ etc/local/runonce.d/ranというディレクトリ構造を作成します。

次のようにスクリプト/ usr/local/bin/runonceを作成します。

    #!/bin/sh
for file in /etc/local/runonce.d/*
do
    if [ ! -f "$file" ]
    then
        continue
    fi
    "$file"
    mv "$file" "/etc/local/runonce.d/ran/$file.$(date +%Y%m%dT%H%M%S)"
    logger -t runonce -p local3.info "$file"
done

次に、次の再起動時に(1回だけ)実行するスクリプトを/etc/local/runonce.dディレクトリに配置し、適切にchownおよびchmod + xします。実行すると、実行されたサブディレクトリに移動され、日付と時刻が名前に追加されます。 syslogにもエントリがあります

クレジットはデニス・ウィリアムズにあります https://serverfault.com/questions/148341/linux-schedule-command-to-run-once-after-reboot-runonce-equivalent

1
Mark Kidd