
毎秒100回未満で保証される毎秒数回カウンタを増やす簡単なbashスクリプトがあります。スクリプトはうまく機能しますが、コンピュータがクラッシュしてもカウンタが持続したいと思います。
SSD専用システムでカウンタを保存する最良の方法は何ですか?/var/<app>/
更新するたびにどこかにエコーする必要があります(たとえば、ファイルに保存する必要がありますか?)もしそうなら、/var/<app>/
それは正しいですか?この単一値を追跡するには、データベース全体をインストールする必要がありますか?これを効率的に実行できるかわいい、小さなLinux機能はありますか?
明らかに、私の問題は、別のスクリプト実行の間にカウンタが一定に保たれることを確認することではなく、すでにその問題を解決しました。私が心配しているのは、コンピュータのクラッシュによってシステムが突然予期せず失敗する場合です(したがって、trap
シェルスクリプトに頼ることはできません)。
答え1
単にファイルに値を保存することを検討してみましたか?これを行うには、データベースの代わりにファイルを使用できます。ただし、1秒あたり100回ずつファイルを読み取ると、スクリプトの競合状態が心配です。ただし、次のものを使用できます。
実行1:
var=2
echo $var > foo.txt
実行2:
var=$(head -n 1 foo.txt)
echo $var # 2
sed
より複雑な処理にも使用できます。また、スクリプトがシーケンシャルな場合は、単にファイルに追加して>>
各実行の最後の行を読んで(を使用してtail
)ロックの問題を解決することもできます。しかし、可能であれば、スクリプトを100回呼び出すのではなく、forループでスクリプトを実行する方が良いデザインになると思います。
答え2
特定の状況(EXIT、TERMなど)では、変数に保存してファイルに書き込むことをお勧めします。trap
プロセスから受信した信号に基づいてコマンドを実行できます。
例は次の場所にあります。トラップコマンド
答え3
最良の方法は、特定の状況(たとえば、オン)にカウンタの最後の値をファイルに保存することですEXIT
。これは組み込みオプションを使用するよりも簡単です。その後、スクリプトにファイルパスを含めて値を取得し、スクリプトが再起動したときに復元できます。
トラップを使用して、プロセスから受信した信号に基づいてコマンドを実行できます。