newz20

<<< Назад

Немного про правильную перезагрузку.

Из-за вопросов про неработающую перезагрузку и как ее починить.

Для начала давайте разберемся где находится перезагрузка в Меню. Сервис -> Выключение системы -> Перезагрузить.

1 2 3

Все ниже описаное будет работать на Linux, для Windows смотрите здесь, в готовых сборках этот момент должен быть учтен и править не надо (во всяком случае путь $filename = ROOT . '/database_backup/db.sql'; ).
Теперь когда мы знаем где заветная кнопка найдем как она работает. Для этого в панели управления перейдем в сценарии и найдем rebootSystem открываем редактирование.
Код нашего сценария выглюдит примерно так: (отмечу что почти все в нем нам досталось от готовых сборок и чистому Linux не нужно), но стоит учесть если вы ставите на одноплатники из скриптов где БД крутится в оперативке, то код вам поможет избежать проблем с БД. Внимательно читайте скрипты которыми ставите.

say("Подготовка к перезагрузке",2);
say("Сервер будет перезагружен через 15 секунд",1);
say("Сохранение БД",1);
$filename  = '/var/www/backup/db.sql';
$mysqlDumpPath = "/usr/bin/mysqldump";
$mysqlDumpParam = " --user=" . DB_USER . " --password=" . DB_PASSWORD;
$mysqlDumpParam .= " --no-create-db --add-drop-table --databases " . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . " > " . $filename);
setTimeout("shutdownTimer","safe_exec('sudo shutdown -r now');",15); //перезагрузка через 15 сек. (если сервер слабый меняйте на больше чтобы успевал сделать бэкап)

Важному изменению, в моем случае, подверглась команда на перезагрузку sudo shutdown -r now , но и в таком виде перезагрузка не будет работать скорее всего и строка с указанием пути и файла в который будет делаться дамп базы $filename = '/var/www/backup/db.sql'; Путь подбирайте сами я прописал прямой, но можно его заменить $filename = ROOT . '/backup/db.sql';

Вообще весь код владельцам Linux не сборкам и не нужен, можно оставить только

say("Сервер будет перезагружен через 15 секунд",1);
setTimeout("shutdownTimer","safe_exec('sudo shutdown -r now');",15);

или сократить до safe_exec('sudo shutdown -r now');

Весь остальной код нужен владельцам сборок для корректной выгрузки и загрузки БД. Но никто вам не запрещает делать контрольную выгрузку бд в файл перед перезагрузкой.

Вернемся непосредственно к перезагрузке. Для корректной работы команды sudo shutdown -r now необходимо дать пользователю, от имени которого запускается команда, права на запуск этой комманды без ввода пароля sudo.
Для этого необходимо прописать разрешение согласно вот этой статьи для Ubuntu и для Debian. Лично мое мнение, что для Ubuntu статья понятней и читать ее нужно с раздела Настройка sudo и прав доступа на выполнение различных команд и после открытия файла /etc/sudoers для редактирования перейти к подпункту Разрешение пользователю выполнять команду без ввода пароля . Крайне не рекомендуется давать пользователю полные права на все. Команды и файлы практически во всех системах Linux одинаковы. После сохранения отредактированного файла, команда sudo shutdown -r now отработает без ввода пароля и компьютер перезагрузится. Узнать своего пользователя можно командой top и посмотреть кто запускает php - это нужный нам пользователь.

Ну собственно есть еще и выключение системы, скрипт называется shutDown и в нем сейчас достаточно просто дописать sudo ну и сменить путь.

Благодарю Skysilver за наставления и помощь в написании статьи.

Обсуждение (1) (11)

Смотрите так же:
03.10.2019 Получение адреса по координатам.
13.09.2019 Ввод пин-кода или киношный экран разблокировки версия исправленная и доработанная
12.09.2019 Ввод пин-кода или киношный экран разблокировки
12.11.2018 Получение данных со стороннего сайта (аналог веб-переменным)
26.09.2018 Светильник на ws2812 + светильник с аккумулятором (часть прошивка)
24.09.2018 Светильник на ws2812 + светильник с аккумулятором (часть сборка)
14.09.2018 Светильник на ws2812 + светильник с аккумулятором

Краснодар, Россия

На форуме: newz20