|
|
#!/usr/bin/env bash
|
|
|
|
|
|
ENABLED=yes
|
|
|
[[ ${ENABLED} == "yes" ]] || exit 0
|
|
|
|
|
|
unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=.
|
|
|
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
|
|
|
|
|
|
SYSCONF="${ROOTFS}${SYSCONF}"
|
|
|
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
SOURCE=${SYSCONF}/save; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
|
|
|
|
|
|
|
|
|
exec_sysrq_reboot(){
|
|
|
#Активизировать магические клавиши SysRq
|
|
|
echo 1 > /proc/sys/kernel/sysrq
|
|
|
[[ ${SYSTEMBOOT_STATEMODE} == "module" ]] && return 0
|
|
|
[[ -n ${SAVE_ALL_CACHE} ]] && return 0
|
|
|
[[ -n ${SAVE_ROOTCOPY_INCLUDE} || -n ${SAVE_ROOTCOPY_CHANGES} || -n ${SAVE_ROOTCOPY_EXCLUDE} ]] && return 0
|
|
|
[[ -n ${SAVE_MODULE_CHANGES} || -n ${SAVE_MODULE_INCLUDE} || -n ${SAVE_MODULE_EXCLUDE} ]] && return 0
|
|
|
echo
|
|
|
echo "The system will restart/shutdown after a maximum of 60 seconds"
|
|
|
echo
|
|
|
sleep 60 && echo b > /proc/sysrq-trigger &
|
|
|
}
|
|
|
|
|
|
## Возможности магических клавиш SysRq
|
|
|
## <r> Переключает клавиатуру в режим XLATE. Это может пригодиться
|
|
|
## в случаях, когда приложения, использующие raw-моду (например X-сервер)
|
|
|
## заканчивают свою работу аварийно. С помощью команды <r> можно вернуть
|
|
|
## клавиатуру в рабочее состояние.
|
|
|
## <k> Клавиша безопасного доступа (SAK -- Secure Access Key). Ядро
|
|
|
## убивает все процессы на текущей консоли. Вы можете использовать эту
|
|
|
## клавишу, что бы быть уверенным, что пароль не будет украден программой
|
|
|
## троянским конём. Если оригинальный login был подменён злоумышленником
|
|
|
## на троянского коня, то по команде <k> эта вредная программа будет
|
|
|
## убита и init запустит подлинный login.
|
|
|
## <b> Немедленно перезапускает систему, не предпринимая попыток
|
|
|
## синхронизации и демонтирования файловых систем. Эта команда может быть
|
|
|
## использована, если Вы не можете перезапустить систему иным путём. Но
|
|
|
## перед тем, как использовать команду <b> всё-таки рекомендуется подать
|
|
|
## команды <s> (синхронизация файловых систем) и <u> (перемонтирование
|
|
|
## файловых систем в режим "только для чтения").
|
|
|
## <o> Останавливает систему, если такая возможность предусмотрена в ядре.
|
|
|
## <s> Ядро производит попытку синхронизации файловых систем (т.е.
|
|
|
## записи на диске приводятся в соответствие с записями в кэше).
|
|
|
## <u> Ядро производит попытку перемонтирования файловых систем в
|
|
|
## режим "только для чтения" (ro).
|
|
|
## <p> Ядро выдаёт dump текущего состояния регистров CPU на текущую консоль.
|
|
|
## <t> Ядро выдаёт список текущих заданий и информацию о них на текущую консоль.
|
|
|
## <e> Всем процессам, кроме init, посылается сигнал SIGTERM.
|
|
|
## <i> Всем процессам, кроме init, посылается сигнал SIGKILL.
|
|
|
## <l> Всем процессам, включая и init, посылается сигнал SIGKILL.
|
|
|
## После этого система становится неработоспособна.
|
|
|
## <0>..<9> Устанавливает loglevel консоли. Т.е. регламентирует вывод
|
|
|
## диагностических сообщений на консоль. Однако, не зависимо от того,
|
|
|
## какой loglevel Вы установите для консоли, диагностические сообщения
|
|
|
## по-прежнему будут регистрироваться демонами syslogd/klogd.
|
|
|
## <h> На консоль выдаётся подсказка по магическим клавишам. На
|
|
|
## самом деле, любая клавиша, не нагруженная определённой функцией,
|
|
|
## выдаёт подсказку, но "h" легче запомнить.
|
|
|
|
|
|
################
|
|
|
##### MAIN #####
|
|
|
################
|
|
|
|
|
|
# Если файл подключен как ресурс с функциями, то выйти
|
|
|
return 0 2>/dev/null && return 0
|
|
|
|
|
|
exec_sysrq_reboot $@
|