こんにちは 次の自転車産業についてお話ししたいと思います。 Habrを見ると、
Bash:子プロセスでデーモンを起動するというすばらしい記事に出会いました。 アイデアを読んだ後、それがなければどこにあるのでしょうか?
入門:
OS: Astra Linux 1.2(1.3)
序文から2つの結論が続きます。
- 認定されていないソフトウェアをインストールすることはできません。インストールしないと、2つの方向(顧客と管理)から猛烈な被害が発生します。
- なぜなら 私たちは真の先駆者であり、簡単な方法を探していません。その場合、dfコマンドの出力は興味を持ちません。
bashでデーモンを構築する主なポイントについては説明しません。これは上記の
記事で完全に説明されているため、実際に作業を始めます:)。
最初に、使用する変数を示します。
なぜなら
dfは私たちに興味がないので、
statを介してファイルシステムの状態に関する情報を取得できます。 ただし、このためには、このファイルシステムがマウントされているディレクトリを知る必要があります。 このデータは/ proc / mountsファイルに保存されますが、わずかな問題があります。ディスク名は、通常のデバイス名(/ dev / sda1など)とデバイスのUUID(ohm)(/ dev / disk / by-uuidなど)の両方で表すことができます/ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。 これらすべてを神の形にするために、
blkidユーティリティ(ロケール/印刷ブロックデバイス属性)が役立ちます。
したがって、
start()関数の入力を開始します。ルートからの起動の確認とプロセスの2番目のコピーの確認は省略し、デバイス名をマウントポイントに一致させるための辞書のコンパイルに直接進みます。
設定ファイルでわかるように、チェックされたディスクパーティションの配列である変数
CHECK_DISKSがあります。 パニックが必要なサイズは、人間が理解できる形式で示され
ます 。転送には、関数
compute_space_prefixを使用します。 関数はサイズとプレフィックスを受け取り、このエコノミーをバイトに変換します。
function calculate_space_prefix() { local value=$1 local result=$2 local size=0 local prefix="" prefix="${value: -1}" len="${#value}" len=$(($len - 1)) size="${value:0:$len}" case $prefix in "K") size=$(($size * 1024)) ;; "M") size=$(($size * 1048576)) ;; "G") size=$(($size * 1073741824)) ;; *)
次に、メインループについて考えます。 その中で、
checked_disks配列を
調べます。この配列では、セクションが示され、必要な値よりも小さい空き領域のしきい値が激しくヒットします。 前述のように、セクションに関する情報を取得するには
statコマンドを使用しますが、次の構文が必要です。
stat -f < > -c "%b %a %s"
ユーザーがパーティション上のスペースを使い果たしているという幸福の手紙を受け取ったときに、電卓に座って読みやすい形式でバイトを再カウントすることを望まない場合は、別の関数を記述します。
function calculate_return_space_prefix() { local value=$1 local space=$2 local size=0 prefix="${value: -1}" case $prefix in "K") size=$(($space / 1024)) ;; "M") size=$(($space / 1048576)) ;; "G") size=$(($space / 1073741824)) ;; *) ;; esac echo $size }
ご覧のとおり、これは同じ関数
calculate_space_prefixであり、その反対です。
これで、すべてがメインサービスサイクルの準備ができました。 そこには十分なコメントはありませんが、それらがなければ基本的な原則は明確だと思います:チェック、チェック、もう一度チェックしてから、手紙を書きます。
誰かが興味を持っている場合、ネタバレの下でサービスの完全なリスト
気づいた脇枠について(理解し修正するには面倒です):
- スクリプトは、変数CHECK_PERIODで指定された遅延で、即座にではなく、送信された信号を処理します。 残念ながら、それがどのように呼ばれるか思い出せませんが、それはサイクルに依存します。
私が伝えたかったのはそれだけです。 すべてビーバー!