起動時に実行されているかのようにスクリプトを実行するにはどうすればよいですか?

起動時に実行されているかのようにスクリプトを実行するにはどうすればよいですか?

起動時にスクリプトを実行していますが、ログ ファイルにエラーが表示されます。手動で実行すると正常に実行されます。おそらく環境が変更されているのでしょう。

再起動せずに起動時に実行される条件でこのようなスクリプトを実行する方法はありますか?

スクリプトは にあり/etc/init.d、 にシンボリックリンクがあります/etc/rc5.d/S97mounter.sh

答え1

ルートとして実行できる

env - scriptname

これにより、スクリプトを実行する前に環境がクリアされますが、 も保持されますshell。 環境をクリアしてシェルを に設定するにはsh、次の手順を実行します。

env -i /bin/sh -c scriptname

これにより、 を使用してスクリプトが実行されます/bin/sh。ただし、その時点で実行されていない可能性のある他のサービスは考慮されないため、ブート環境が完全にシミュレートされるわけではありません。

crontab環境をシミュレートするための同様の質問を見つけました。非常に便利な解決策が投稿されています。んー

これを使用すると、スクリプトでこれを実行し、ホストを再起動してから、環境ファイルを使用して環境をロードできます。

ブートスクリプトの一部:

env > /var/tmp/bootenv

次に、通常の実行時に同じブート環境を設定するには、次のようにします。

env - `cat /var/tmp/bootenv` /bin/sh -c scriptname

答え2

プログラムが起動スクリプトではなくユーザー セッション経由で起動される場合、次のような点が異なる場合があります。

  • プログラムは多くの環境変数 ( PATH、、HOME… を含む) を継承します。
  • プログラムは、端末を含むいくつかのファイル記述子を継承します。
  • 制限は異なる場合があります。

最小限の環境でプログラムを実行し、標準のファイル記述子を閉じるには、次のようなものを使用します。

env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin myprogram </dev/null >/dev/null 2>/dev/null

システムのマニュアル ページまたはその他のドキュメントをチェックしてinit、定義されている環境変数を確認してください。デーモンとして実行することを目的とした多くのプログラムでは、これ以外には何も必要ありませPATHん。PATH上記の値は、Debian の init のデフォルトです。

答え3

スクリプトが何をしているか、どのようなエラーが発生しているかについての詳しい情報がなければ、正確な回答を出すのは難しいです。そうは言っても、おそらく可能環境を再現することはできますが、ファイルシステムのアンマウントやバインドマウントなどの面倒な作業が必要になるため、非常に困難になる可能性があります。

代替案としては、次のようなものを使用して仮想マシンを作成することが考えられます。バーチャルボックスまたは仮想化これを使用してデバッグを実行すると、ホスト マシンを再起動せずに、必要な頻度で仮想マシンを再起動できるようになります。

関連情報