Solaris 10 - 起動スクリプトを使用してシステムを再起動できますか?

Solaris 10 - 起動スクリプトを使用してシステムを再起動できますか?

私はSolaris 10テストゲスト論理ドメイン(LDom)を持っています。再起動する前に使用する予定です/etc/rc0.d

現在のシステムが起動すると、起動スクリプトのすべてのエントリが再起動されないことを除いて、私は望む方法で実行されます。

テストスクリプトを作成し、必須項目を除くすべての項目を削除しました。

#!/sbin/sh

# MAIN

case "$1" in
start)
   if [ -f /etc/DR_Network_Configured ]; then
      exit 0
   else
      touch /etc/DR_Network_Configured
      reboot
   fi
   exit 0
   ;;
*)
   echo "Usage: $0 { start }"
   exit 1
   ;;
esac
exit 0

/etc/rc0.d/S99testing startコマンドラインからスクリプトを実行すると、ファイルが生成され、/etc/DR_Network_Configuredシステムがすぐに再起動されます。これは望ましい動作です。

しかし、ファイルを削除して/etc/DR_Network_Configuredシステムをシャットダウンして再起動すると、起動/etc/DR_Network_Configured中にスクリプトによってファイルが再生成されますが、後続の再起動は発生しません。

起動スクリプトによって潜在的に無限の再起動が発生するのを防ぐ安全装置メカニズムはありますか?それでは、この問題を解決する方法はありますか?

ベストアンサー1

このスクリプトをからに/etc/rc0.d移動することをテストし、次のような結果を得ました。/etc/rcS.d/etc/rc1.d/etc/rc2.d/etc/rc3.d

  • /etc/rcS.d- /etc/DR_Network_Configured 生成と同じ動作ですが、再/etc/rc0.d起動しません。
  • /etc/rc1.d– /etc/DR_Network_Configured は生成されず、再起動されません。
  • /etc/rc2.d– /etc/DR_Network_Configured を作成し、システムを再起動します。
  • /etc/rc3.d– /etc/DR_Network_Configured を作成し、システムを再起動します。

要約すると、システムがデフォルト状態(milestone/multi-user-server:defaultランレベル3に似ています)で起動すると、およびにある起動スクリプトを実行しますが、/etc/rc0.d実行/etc/rcS.d/etc/rc2.dませ/etc/rc3.d/etc/rc1.d

/etc/rc0.d再起動および初期化コマンドは、起動スクリプトで実行された場合は機能しません/etc/rcS.d(おそらく/etc/rc1.dそのディレクトリの起動スクリプトが実行されないため、確認できません)。との起動スクリプトで実行すると/etc/rc2.d動作します/etc/rc3.d

システムが継続的に再起動しないように設計されているようです。無効なブートスクリプトが入った/etc/rc2.d場合、/etc/rc3.dまたはシステムを無限の再起動ループに陥らせると、システムは非常に簡単に再起動することができます。ボリューム/ディスクと問題のあるスクリプトを無効にします。

上記に基づいて、ネットワーク再構成スクリプトを次のように修正しました。

  1. ネットワーク設定を変更するには、スクリプトを維持してください/etc/rc0.d
  2. ネットワーク再構成後にシステムを再起動する必要がある場合は、/etc/rc2.d/S99rebootシステムを再起動するための新しいスクリプトを生成する機能が追加されました。
  3. /etc/DR_Network_Configuredファイルが存在し、存在する場合、/etc/rc2.d/S99reboot継続的なシステム再起動を防ぐために、後者を削除します。

私の関連コードは次のとおりです。

#!/sbin/sh
reboot_script="/etc/rc2.d/S99reboot"

Create_Reboot_File ()
{
   echo "#!/sbin/sh" > $reboot_script
   echo "case \"\$1\" in" >> $reboot_script
   echo "start)" >> $reboot_script
   echo "  init 6" >> $reboot_script
   echo "  exit 0" >> $reboot_script
   echo "  ;;" >> $reboot_script
   echo "esac" >> $reboot_script
   echo "exit 0" >> $reboot_script
   chmod 740 $reboot_script
   chown root:root $reboot_file
}

case "$1" in
start)
   if [ -f /etc/DR_Network_Configured ]; then
      [ -f $reboot_script ] && rm $reboot_script
      exit 0
   else
      # My reconfigure network functions are here
      # ...
      touch /etc/DR_Network_Configured
      Create_Reboot_File
   fi
   exit 0
   ;;
*)
   echo "Usage: $0 { start }"
   exit 1
   ;;
esac
exit 0

おすすめ記事