起動時に実行されるスクリプトがあり、ログファイルにエラーが表示されます。手動で実行すると正常に実行されます。環境が変更された可能性があります。
再起動せずに起動時にこのようなスクリプトを実行する方法はありますか?
スクリプトは/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
スクリプトが何をしているのか、何が起こっているのかに関する追加情報がなければ、正確な答えを提供するのは難しいです。このように、おそらく可能環境を再生成しますが、これは非常に困難な場合があり、ファイルシステムのアンマウント、バインドマウント、またはその他の興味深い作業を実行する必要があります。
別のオプションは、次のようなものを使用して仮想マシンを作成することです。仮想ボックスまたはキーボード仮想マシンそしてそれを使用してデバッグを実行するので、ホストを再起動せずに必要に応じて仮想マシンを再起動できます。