bashスクリプトを使用してデーモンプロセスを作成するのは安全ですか?

bashスクリプトを使用してデーモンプロセスを作成するのは安全ですか?

完全自動化されたボックス(Raspberry-PiまたはOLinuXinoカードなどに基づいています)を作成したいと思います。

マイコンピュータは、読み取り専用ファイルシステムとRAMディスク(SDカードの損傷を防ぐため)を備えたDebianベースのシステムを実行します。

ボックスがオンになるかネットワークに接続されるたびに、SSHを介してリモートサーバーに自動的に接続するスクリプトを作成したいと思います。

このための最も簡単な解決策は、デーモンとして実行されるシェルスクリプトを作成することだと思います。このデーモンは、ボックスが終了するかネットワーク接続が失われるまでアクティブなままにする必要があります。ネットワークがオンになったりボックスが再起動したりすると、スクリプトを再接続できるはずです。

Q:シェルスクリプトがこれを行うのに十分安全であると思いますか?または、他の(より安全な)プログラミング言語(PERL、C、...)を使用する必要がありますか?

答え1

多くのデーモンは実行のためのスクリプト言語としてbashを使います。使用しても問題ありません。

答え2

通常、bash(または通常はシェルスクリプト)からデーモンを生成するのは非常に面倒です。バックグラウンドブランチ、出力、エラーメッセージのリダイレクト、信号処理などのいくつかの問題は解決するのは簡単ではありません。

説明されている特定の問題に対してrespawnで自動SSH接続を実行できるいくつかの(無料)ソフトウェアがあります。

私は使うautosshこの目的のために。 Debian にパッケージされており、うまく動作します。

答え3

bash非常に安全ですが、クリーニングを処理できない場合はあまり役に立ちません。何らかの理由で終了した場合、スクリプトは必要に応じて状態を更新できるように独自に更新できる必要があります。exec単に次のようにしたくないでしょう。

while :

...例えば。早く老いていきますね。代わりに、次の操作を実行できます。

trap '' HUP EXIT
set_state() { echo stuff="'$(otherstuff)'"... ; }
chk_interval() { wait for something... ; }
exec_me() { exec env - $(set_state) "$0" <in >out 2>alsoout & ; }
chk_interval
exec_me

また、清掃を行う人によって異なります。これ最も単純なデーモンプロセスを実装する方法は次のとおりです。

init=path/to/executable/script

...一時的な単一目的インストールの場合、カーネルコマンドラインから。ここで推論される相対値/はinitramfsです/

関連情報