システムが起動時にrc.local内のスクリプトコードを実行しない理由を誰かが知っていますか? VMware ESX(Red Hat)の初期インストール後に実行したい構成後のbashスクリプトがありますが、何らかの理由で実行されないようです。ある時点で失敗した場合にどこまで到達するかを確認できるように、実行の開始と進行状況をログに記録するように設定していますが、そのログを見ても、開始されていないことがわかります。スクリプトコードの実行。スクリプトに実行権限(755)があることを確認しましたが、他に何を確認する必要がありますか?
これが私のコードの最初の数行です:
#!/bin/sh
echo >> /tmp/configLog ""
echo >> /tmp/configLog "Entering maintenance mode"
それで、/ tmp/configLogは存在しますか?もしそうなら、あなたのスクリプトは発火していて、どこかで死にかけているだけです。
基本から始めましょう:
/ tmp/itworkedをタッチしますそれは機能しましたか?再起動後、/ tmp/itworkedは存在しますか?その場合、rc.localが実行されています。
/ bin/myscript&初期化。実行に時間がかかりますか?ユーザーがブートプロセスを停止できないようにするために、initスクリプトのどこかにタイムアウトがある可能性があります。プロセスをバックグラウンドで実行すると、プロセスが存在する場合はそれを回避できます。
/ bin/sh /etc/rc.localコマンドラインから?
システムがrc.localをサポートしていることを確認しますか?文書化されていない場合は、すべてのinitスクリプトに従う必要があります。/etc/inittabから開始します。 (そこから/etc/rc.d/rcに移動することがあります)
一部のシステムでは、/ etc/rc.d /rc.localはシンボリックリンク/etc/rc.d/rcX.d/S99localを介してサポートされます。 (ここで、Xは適切なランレベルです)。
RedHatを使用している場合、独自のinitスクリプトを作成せず、それを/etc/rc.d/init.dに追加し、chkconfig ---スクリプトを追加し、スクリプトにchkconfigを追加する本当の理由はありません。これにより、/ etc/rc.d/rcX.dディレクトリへの正しいシンボリックリンクが作成され、initスクリプトの展開または無効化が容易になります。
廃止されたrc.localを使用することは、システムがそれをサポートしている場合、迅速なハッキングには問題ありませんが、重要または永続的なものにはあまり適していません。
Linuxでのinitスクリプトの処理が順次か並列かはわかりませんが、Solarisシステムはスクリプトを順次起動します。以前のinitスクリプトがまだ終了していない場合(sendmail/DNSの依存関係が原因でこれが表示されることがあります)、後のスクリプトは想定したほど速く起動されません。
Psを使用して、以前のinitスクリプトがまだ実行されているかどうかを確認します。
タイプミスのような単純なものではありませんか?これが必要です:
#!/bin/
h
ash
本当にあります:
#!/bin/
b
ash
?
(CKがコメントで言ったように、今私は見ています)
rc.localは、スタートアップスクリプトを実行するBSDの方法でした。多くのLinuxバージョンは、起動時に実行される「rc.local」というファイルのサポートをサポートしていますが、LinuxはSolarisの起動スクリプトの処理方法に従っているため、これらを機能させるには多数のシンボリックリンクやその他の接着剤が必要でした。
その最初の行に実際に#!/ bin/hashと表示されている場合は、次のようなエラーが発生します。
-bash: ./test.sh: /bin/hash: bad interpreter: No such file or directory
それが実行されるとき。
スクリプトに実行権限があることを確認することもできます。
おそらく、rc.localスクリプトに構文エラーがあります。システムの起動後にコマンドラインから手動で実行しようとすると、正しく実行されますか?
Rc.localファイルを含むディレクトリのアクセス許可を確認しましたか?
あなたのコードはもっとこのように見えるべきではありませんか?ここで3つの変更:
#!/bin/bash
echo "" >> /tmp/configLog
echo "Entering maintenance mode" >> /tmp/configLog
SELinux。
Getenforceを試して、selinuxがオンになっているかどうかを確認してください。オンにすると、1または強制を返します。次に、dmesgをチェックして、スクリプトに関係しているように見えるselinux関連のエラーがあるかどうかを確認します。