Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > вызов httpd graceful через перл


Автор: CTYDEHT 12.1.2006, 13:39
Это собственно говоря все, что нужно сделать. Перегрузить httpd.conf, когда вызывается скрипт через браузер. Я написал такой скриптик:

Код

#!/usr/local/bin/perl -w -U
print "Content-type: text/html\n\n";
system ("httpd graceful");


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

Хотя например ls работает нормально, показывает содержимое папки.

Кто-то может сказать в чем может быть дело?

Автор: sharq 12.1.2006, 14:56
CTYDEHT скорей всего ошибка какая-то вываливается, может прав нет или нет возможности перезагруpить в данный момент виртуальный сервер.

Поэтому пробуй так, чтобы увидеть и ошибки:
Код

#!/usr/local/bin/perl -w
use strict;
print "Content-type: text/html\n\n";
my @content = `httpd graceful 2>&1 &`;
print 'Content:<br>', join "<br>\n", @content; 


smile

Автор: CTYDEHT 12.1.2006, 18:16
Сделал, вот что вывело:

Код

Content:
sh: line 1: httpd: command not found 


Странно... почему? Кстати я также обнаружил, что не работает и 'cd'

У меня есть root доступ... Может где что поменять нужно?

sharq, вот моя ася 222 697 257, стукни пожалуйста

Автор: Sadok 13.1.2006, 12:58
CTYDEHT
Так чтобы перегрузиь сервак, нужны рутовые права, а у тебя скрипт выполняется от какого-нить nobody:nobody (или от чего там сервер запущен). Такчто sudo натрави на него.

Автор: CTYDEHT 13.1.2006, 17:02
Sadok Спасибо за совет. У меня действительно скрипты запускаются от nobody:nobody.

Но здесь есть несколько ньюансов. Я не пользовался никогда sudo, но насколько я порылся в интернете я понял, что можно сделать что-то вроде авторизации, т.е. в скрипте указать логин и пароль юзера, который имеет рутовые права и потом от его имени выполнять команды.

Такой вариант хоть и подходит, но не очень, потому-что если некоторые "злые дяди" доберутся до этого файла, то сервер будет в их руках.

Существует ли возможность сделать так, чтоб какой-то определенный скрипт запускался от имени определенного пользователя, а все остальные по прежнему от nobody:nobody?

Или какой-то другой способ, чтоб в самом скрипте никаких "интимных" данных не указывалось и плюс к этому все остальные юзеры и аккаунты по прежнему выполняли скрипты от nobody:nobody.

Автор: CTYDEHT 14.1.2006, 13:39
Попытался я настроить sudoers следующим образом

nobody ALL=NOPASSWD: /usr/sbin/httpd graceful secword

а мне выдало Sorry, sudo must be setuid root.

Я подумал, что я сделал что-то не так, но то же сообщение было и после:

nobody ALL=NOPASSWD: /usr/sbin/httpd graceful secword
nobody ALL=NOPASSWD: /usr/sbin/httpd graceful
nobody localhost=NOPASSWD: /usr/sbin/httpd graceful

и даже после:

nobody ALL=(ALL) ALL


Люди, кто пользовался sudo, подскажите, в чем может быть косяк???

Автор: CTYDEHT 15.1.2006, 19:47
Проблема решилась.

Спасибо всем, кто помог.

Автор: BlackLFL 15.1.2006, 23:04
как она решилась, напишите тут, чтобы другие потом не задавали подобный вопрос ...

Автор: CTYDEHT 16.1.2006, 09:25
Sudo не работал потому что не получал ID текущего юзера. Нужно было выставить права `chmod 4111 /usr/bin/sudo`. Тогда в sudoers нужно указывать не nobody, а имя юзера на чьем аккаунте выполняется скрипт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)