Перезагрузка linux из php

Обновлено: 06.07.2024

Если вы начинающий администратор или только перенесли свой проект на VPS и еще не со всем разобрались, то у вас может возникнуть вопрос как перезапустить Nginx. Это очень популярный веб-сервер, такой же популярный, как и Apache и достаточно часто используется для различных проектов.

Перезапуск веб-сервера может понадобиться после того, как вы изменили его настройки, добавили новый домен и так далее. В этой небольшой статье мы рассмотрим как выполняется перезагрузка Nginx на сервере.

Как перезапустить Nginx

Первое что вам нужно - это получить доступ по ssh к серверу, но если вы уже меняли там какие-либо настройки, то, скорее всего, доступ у вас есть, так что этот момент упустим. Другой момент, это система управления процессами, сейчас большинство, если не все популярные дистрибутивы, используют systemd. Поэтому я буду описывать работу именно с ней. И еще, вам нужен именно VPS, или сервер, на хостинге такое сделать у вас не получится, даже если есть ssh доступ.

Первое что желательно сделать если вы меняли настройки Nginx, и что-то делали с конфигурационными файлами, это проверить их на ошибки с помощью команды:

Если это производственный сервер, то пользователи вообще не должны заметить что был перезапуск Nginx, а если будут проблемы то после установки веб-сервер не запустится и будет лежать пока вы их не решите. Только теперь можно перезапустить Nginx:

systemctl restart nginx

Если нужно только перечитать конфигурационные файлы выполните:

systemctl reload nginx


Есть еще один путь, можно передать команду перезапуска самому сервису nginx с помощью опции -s:


В случае если обычная перезагрузка не помогла, можно попытаться остановить сервис, а затем снова его запустить:

systemctl status nginx

systemctl stop nginx

systemctl start nginx


Перезапуск Nginx с помощью ISPManager

Панель управления VPS ISPManager довольно популярна среди пользователей и если вы используете ее на своем сервере, то можете перезапустить Nginx с помощью нее. Для этого авторизуйтесь в панели, перейдите на вкладку "Система", "Службы", а затем найдите там пункт "Nginx", выделите его и нажмите кнопку "Перезапуск":


Готово, теперь Nginx перезапущен.

Выводы

В этой небольшой статье мы рассмотрели как перезапустить Nginx на вашем сервере. Если у вас остались вопросы, спрашивайте в комментариях!

Конференция HighLoad в которой рассказывается что нового в Nginx:

У меня есть пользователь brftv в моей системе linux, и у меня есть www-данные, которые запускают nginx.

из terminal я могу позволить своему пользователю brftv работать

Но когда мой файл php запускает следующий код, ничего не происходит

Я добавил строку www-data в etc/sudoers выше на случай, если это было необходимо при запуске вышеупомянутого exec() (хотя я запускаю его как -u brftv, но я не эксперт linux, просто подумал, что лучше быть в безопасности на всякий случай).

Файл php, который запускает этот exec(), принадлежит www-data, а chmod-777, поэтому все должны иметь привилегии для выполнения из него.

Я пробовал запускать php-файл как через браузер (я предполагаю, что он будет запущен пользователем www-data), так и из terminal $ php myFile.php .

Что позволяет всем пользователям моей системы запускать reboot cmd без пароля. Это работает, но я предпочитаю не оставлять его THAT открытым, поэтому другое решение с /etc/sudoers было бы лучше, если бы у кого-то был намек на то, в чем моя проблема.

Как я могу сделать снимок первой страницы файла PDF в Linux? Я хочу сделать это на сервере VPS автоматически. Мое распределение-Debian.

Мой вопрос связан со знанием о встроенном Linux. Я только что наблюдал странную перезагрузку моего встроенного проекта, который очень легко воспроизвести. Когда срабатывает какое-то условие, системе нравится freezing. Я имею в виду, что это как столкнуться с какой-то бесконечной петлей или быть.

Я бы использовал очень маленькую программу C, чтобы предоставить доступ только группе PHP (вероятно, www-data в вашем случае?), Использовать бит suid в исполняемом файле и команду exec перезагрузки

Переместите phpreboot туда, где вы хотите его запустить (должен быть доступен по PHP!)

Как root (или через sudo ) убедитесь , что владелец является root , а группа имеет значение www-data, и измените права на бит suid (в этом порядке)

В результате ls -l phpreboot должно быть что-то вроде (обратите внимание на s в rws )

Измените сценарий PHP, чтобы вместо этого выполнить phpreboot

Только один крошечный исполняемый файл будет иметь suid для запуска программы перезагрузки , и только группа PHP сможет выполнить его (и, конечно, root ).

  • О битах setuid и suid
  • PHP получает идентификатор запущенной группы , затем на Linux выполнение id groupID дает имя группы.

Предоставление разрешения на перезагрузку www user является плохим idea.Create a cron и делает перезагрузку системы из cron, а не из сценария PHP. Cron будет запускаться каждую минуту и проверять наличие флага перезагрузки. Если он установлен, он выполнит перезагрузку.

1)запишите флаг в файл из вашей программы php, чтобы cron мог решить, делать перезагрузку или нет.

2) Создайте сценарий bash для чтения этого файла и выполните перезагрузку, если сценарий PHP скажет ему это сделать.

выполните это в shell chmod +x mycron.sh

3) Настройте скрипт в crontab

crontab -e и вставьте это

4) Пользователь, установивший cron, должен иметь разрешение sudo. Добавьте его в sudoers.

Так что мне очень жаль, если я немного перепутаю имена. Я все еще довольно новичок в linux. Я устанавливаю безголовый raspberry pi webserver. Я установил на него сервер TightVNC, чтобы удаленно войти, но ни за что на свете не могу заставить этот чертов сервер запуститься, когда мой Пи.

Я хочу скомпилировать код c/c++ на сервере linux. Я использую php. Предположим, я получаю исходный код от пользователя, а затем создаю временный файл с ним, а затем с помощью gcc я просто пытаюсь сделать простой исполняемый файл. Чтобы сделать все это, я делаю следующий код, но он не производит.

Единственный способ заставить это работать в моей системе-это "hack", изменив chmod на /sbin/reboot как сделал этот парень

sudo chmod u+s /sbin/reboot

Я понимаю, что это может быть не оптимальным во многих случаях, но этот mediaPlayer очень сильно заблокирован, поэтому в любом случае нет доступа к terminal для кого-либо еще.

попробуйте этот код exec('sudo shutdown -r now');

или "shutdown -r +5" выключение через 5 минут

Зачем ты положил туда -u brftv ? Это заставляет ваш скрипт PHP пытаться запустить reboot от имени пользователя, что не сработает. Только root может перезагрузить систему. Уберите его.

Разрешить Перезагрузку С PHP:

  1. vim /etc/sudoers
  2. Элемент списка вставьте новую строку " %www-data ALL=NOPASSWD: /sbin/reboot " и запишите изменения.
  3. Перезагрузка OS.
  4. Убедитесь, что ваш скрипт принадлежит www-data, chown www-data:www-data filename.php (apache пользователь)
  5. Запустить скрипт

(протестировано на сервере ubuntu 14.40 LTS с php5-7, также должно работать на любом дистрибутиве на основе debian.)

Попробуйте этот код

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

Я хотел бы получить доступ для редактирования любого txt-файла (в Редакторе gedit) из PHP. Я пытаюсь использовать что-то вроде: <?php shell_exec(gedit filename.txt); ?> Но это даже не дает.

У меня есть файл config.properties для хранения учетных данных и адреса IP для моего приложения в качестве пар ключ-значение. Однако запись в этот файл свойств перезагружает контекст приложения в.

У меня есть небольшая проблема здесь, мне нужно иметь возможность читать файл неизвестного размера, это может быть несколько сотен строк или гораздо больше, файлы журнала меняются все время и в.

Как я могу сделать снимок первой страницы файла PDF в Linux? Я хочу сделать это на сервере VPS автоматически. Мое распределение-Debian.

Мой вопрос связан со знанием о встроенном Linux. Я только что наблюдал странную перезагрузку моего встроенного проекта, который очень легко воспроизвести. Когда срабатывает какое-то условие, системе.

Так что мне очень жаль, если я немного перепутаю имена. Я все еще довольно новичок в linux. Я устанавливаю безголовый raspberry pi webserver. Я установил на него сервер TightVNC, чтобы удаленно.

Я хочу скомпилировать код c/c++ на сервере linux. Я использую php. Предположим, я получаю исходный код от пользователя, а затем создаю временный файл с ним, а затем с помощью gcc я просто пытаюсь.

Есть ли способ сделать задержанную перезагрузку зоны в гобелене? У меня есть операция not-so-quick, которую я выполняю, когда отправляю форму. Результаты видны через несколько секунд (обычно 2 или.

Я хотел бы выполнить программу linux из php, как я могу это сделать ? В linux terminal я обычно так и делаю : ./program_name -o argument1 -f argument2 -out argument3 Как я могу сделать это в PHP ?

У меня есть резервный скрипт, который выполняется ежедневно с помощью задания cron. Это копирование с FTP-серверов и подключенных жестких дисков USB, баз данных и т. Д.

В конце сценария я хочу перезагрузить компьютер с Linux, поэтому я добавил конец сценария:

Но если на следующий день набрать uptime, то обнаружится, что он не перезагрузился. Задание cron выполняется пользователем root, поэтому мне не нужно ставить sudo или su перед командой afaik. Поэтому вместо этого я попробовал другие варианты команды, такие как:

Одна попытка за раз, конечно, не все вышеперечисленные 5 строк друг за другом. ПК просто не перезагружается.

У кого-нибудь есть идеи по этому поводу?

проверьте журналы примерно в то время, когда должна произойти перезагрузка. обратите внимание, что переменная PATH не получена из конфигурации оболочки для заданий cron, поэтому «завершение» не будет найдено. Это скрипт bash. И задание cron вызывается с использованием пути (/home/username/backup.sh), но отдельные команды в сценарии вызываются без путей, и все они работают нормально. Только команда перезагрузки отказывается выполняться. Не существует ограничений на скрипты cron или shell для предотвращения перезагрузки. Я только что проверил это на виртуальной машине RHEL с успехом. Одна из очень веских причин для этого может заключаться в том, что в сценарии есть предыдущий возврат или ошибка, в результате чего сценарий останавливается до обработки команды перезагрузки. Попробуйте запустить скрипт вручную в оболочке в безопасное время. Следите за ошибками в задачах копирования файлов, которые преждевременно останавливают скрипт. Проверьте статус ошибки через echo $? после, если перезагрузка не работает. Разобрать скрипт, чтобы проверить, что он не заканчивается вручную перед вашей командой перезагрузки.

Адский способ перезагрузки это использовать

Но это перезагрузит ваш компьютер через 3 секунды без изящной остановки каких-либо служб / приложений, так что вы можете подумать о другом.

Также shutdown может не распознать аргумент "-t", взяв вместо этого аргумент time:

В любом случае, отключение человека может пригодиться. Похоже, что выключение не принимает ничего, кроме минутного разрешения, но ваш пробег может отличаться.

Команда Reboot (перезагрузка) Linux

Когда ядро ​​обновляется, если вы не используете Ksplice или KernelCare, вам необходимо перезагрузить систему Linux. Перезагрузка системы может также потребоваться в других обстоятельствах, например, при устранении неполадок оборудования, установке приложений и т. Д. Если вы используете безголовый сервер Linux, вам нужно знать, как перезагрузить систему из командной строки.

В большинстве современных дистрибутивов Linux systemctl утилита заменяет большинство команд управления питанием, использовавшихся в старых дистрибутивах Linux, на sysvinit. reboot И shutdown команды псевдонимы systemctl и доступны в системе по причинам совместимости.

С помощью systemctl

Чтобы перезагрузить систему Linux, просто введите reboot или systemctl reboot :


Система будет перезапущена немедленно.


С помощью shutdown

При использовании с -r параметром shutdown команда выполняет перезагрузку системы:

По умолчанию система будет перезагружена через 1 минуту, но вы можете указать точное время, когда вы хотите, чтобы система была перезагружена.

Аргумент времени может иметь два разных формата. Это может быть абсолютное время в формате hh:mm и относительное время в формате, +m где m - это количество минут с этого момента.


В следующем примере будет запланирована перезагрузка системы на 10 часов утра:


В следующем примере будет запланирована перезагрузка системы через 5 минут:


Чтобы немедленно выключить вашу систему, используйте +0 ее псевдоним now :


Следующая команда отключит систему через 10 минут и уведомит пользователей, что будет выполнено обновление оборудования:


Если вы запланировали перезагрузку и хотите отменить ее, запустите shutdown команду с -c параметром:


Вывод

Для перезагрузки системы Linux введите reboot свой терминал. Операционная система перезагрузится через несколько секунд.

Читайте также: