Из-за вопросов про неработающую перезагрузку и как ее починить.
Для начала давайте разберемся где находится перезагрузка в Меню. Сервис -> Выключение системы -> Перезагрузить.
Все ниже описаное будет работать на 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 за наставления и помощь в написании статьи.
Краснодар, Россия
На форуме: newz20