Солярис 10 - действительно ли возможно перезагрузить систему из сценария запуска?

Можно использовать valgrind для этого:

$ valgrind myprogram arg1 arg2

Его вывод будет иметь много несоответствующего материала, но его сводка "кучи" делает то, что Вы хотите:

==91383== HEAP SUMMARY:
==91383==     in use at exit: 157,643 bytes in 364 blocks
==91383==   total heap usage: 2,999 allocs, 2,635 frees, 306,450 bytes allocated

4
20.01.2018, 19:50
1 ответ

Я протестировал перенос этого скрипта из /etc/rc0.d в /etc/rcS.d , /etc/rc1.d , /etc/rc2.d и /etc/rc3.d со следующими результатами:

  • /etc/rcS.d - то же поведение, что и / etc /rc0.d - / etc / DR_Network_Configured создается, но перезагрузки не происходит.
  • /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
3
27.01.2020, 20:58

Теги

Похожие вопросы