実行中のスクリプトに引数を渡す最善の方法は何ですか?

実行中のスクリプトに引数を渡す最善の方法は何ですか?

スクリプトがあります(ダッシュから)システム起動時に実行(デーモンで)。このスクリプトはルートで実行されます。

正しいパラメーターを使用してユーザーの下にファイルを生成し、スクリプトはファイルが存在するかどうかを毎秒確認し、パラメーターを読み取ります。

つまり、ファイルを介してスクリプト(ルートとして実行)にパラメータを渡します。より良い方法を教えてもらえますか?

何が必要です:ユーザーコマンド(アクション)を介してroot権限でスクリプトを実行します。ユーザーの権限を高める必要はありません。フォルダ(if-pre-up.d/...)からスクリプトを実行するときにネットワークインターフェイスを増やすオプションがあります。 udevを見てフラッシュカードを差し込んでいますが、それはあまり便利ではありませんね。

@Marcus Müller たとえば、ユーザーが短時間で読む必要があるファイルがあります。(ルート:user440)。権利は後で再度変更する必要があります。(ルート:user400)

@MarcusMüllerオペレーティングシステムGnu / Linux(Debian)。 'これらすべては、実際にはユーザーとルートデーモンの間にメッセージを渡すように聞こえます。' - はい

@FrédéricLoyer 私はパイプソリューションが大好きです。 @Marcus Müllerが見た間違ったパイプ動作が発生しますが、5〜30分ごとにパラメータを渡す必要があるため、混同しないでください(aより前のb)。つまり、ルートで実行されるスクリプトは次のようになります。

#!/usr/bin/dash
mkfifo fifo
while read line <fifo; do
        if [ $line -eq 'arg1' ] ; then
                echo 'Starting...'
        fi
done

正しいですか?安全面でこのパイプを使用すると、問題はさらに悪化しますか?

ベストアンサー1

特権の昇格だけが必要な場合は、sudoデーモンよりも優れています。

ユーザー入力を待つバックグラウンドプロセスが本当に必要な場合は使用できますmkfifo。バックグラウンドプロセスは名前付きパイプ()から行を読み取り、ユーザーread line < the_named_pipeはそのパイプ(echo arg >> the_named_pipe)に何かを書き込みます。その後、バックグラウンドプロセスは毎秒CPUを使用して、積極的に待機するのではなく受動的に待機します。

おすすめ記事