起動時にスクリプトを実行していますが、ログ ファイルにエラーが表示されます。手動で実行すると正常に実行されます。おそらく環境が変更されているのでしょう。
再起動せずに起動時に実行される条件でこのようなスクリプトを実行する方法はありますか?
スクリプトは にあり/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 のデフォルトです。