2014-11-30 3 views
0

Я хочу, чтобы перезагрузить мой Nginx после некоторых сценариев на моем PHP веб-приложения с exec_shell функции в PHP, как это:выполнить скрипт с PHP + Nginx

shell_exec('sudo sh /var/www/camva/subdomain.sh'); 

Этот код запуска после каждого запроса для перезагрузки Nginx на моем файл route.php.

Кроме того, мой файл оболочки subdomain.sh содержит:

#!/bin/bash 
sudo /etc/init.d/nginx restart 

Но я даю этот ответ после каждого запроса:

Reloading nginx ... fail ! 

Я не знаю, почему этот сценарий произошло, но я могу запустить этот команды в моем корне с командой терминала, такой же, как "sudo /etc/init.d/nginx restart", и дать правильный ответ о перезагрузке nginx!

Благодарим за помощь.

+0

Вы добавили пользователя nginx и свою команду в файл sudoers? Взгляните на это http://stackoverflow.com/q/3166123/1301076 – rjdown

ответ

-1

Чтобы случайно предположить, вы пытаетесь выполнить сценарий оболочки как root, используя учетную запись, которая, вероятно, не имеет корневого доступа. Nginx должен работать как пользователь, у которого нет доступа root. То, что вы можете попытаться сделать, - это chmod разрешения на файл сценария соответственно, чтобы он выполнялся как root, даже когда другой пользователь активировал его.

Сначала сделайте root владельцем скрипта, который вы хотите запустить (subdomain.sh). Запустите эти команды в CLI, а не в вашем скрипте.

sudo chown root.root /var/www/camva/subdomain.sh

Затем сделайте файл сценария исполняемым на всех и доступен для записи только для корня.

sudo chmod 4755 /var/www/camva/subdomain.sh

Теперь пользователь Nginx должен быть в состоянии выполнить сценарий, но не изменять содержимое файла.

Было сказано, что мне интересно, зачем вам перезагружать сервер, и если, возможно, есть лучшее решение всеобъемлющей проблемы, которую вы пытаетесь решить.

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

+0

Я создаю субдомен для пользователей и создаю файлы vhosts для каждого пользователя. Мне нужна перезагрузка nginx для работы vhosts. –

+0

@ user239546, наоборот, файл sudoers ТОЧНО правильно подходит для этого. Это, по сути, причина, по которой она существует. Ссылка, которую я разместил под вопросом OP, должна помочь устранить вашу путаницу с безопасностью. Вы уверены, что, черт возьми, вы не хотите запускать что-либо как root. Хлоп. – rjdown

+0

А я вижу. Я использовал вышеупомянутый подход разрешений несколько раз в тех случаях, когда у меня не было другого подхода к тому, что я хотел сделать в Дженкинсе. – user239546

Смежные вопросы