2008-12-08 4 views
5

Мне нужен простой способ разрешить конечному пользователю перезагрузить tomcat с веб-страницы, обслуживаемой из apache в том же поле.Как программно перезапустить системную службу (а не apache) из apache в Linux?

Мы стараемся, чтобы наш отдел контроля качества развернул новую версию нашего веб-приложения apache. Мы используем samba, но нам нужен простой способ остановить/запустить сервер tomcat до/после развертывания.

Это будет только для внутренних коробок qc. Существует ли для этого существующее решение? или было бы проще написать несколько быстрых приложений php, чтобы справиться с этим?

ответ

8

Как Пропустить, но не запускайте CGI как корень. Вместо этого вызовите CGI-вызов sudo. Вы можете предоставить разрешение веб-сервера для запуска /etc/init.d/tomcat restart только в файле sudoers.

Я действительно сделал это на работе; соответствующая часть CGI выглядит следующим образом:

#!/usr/bin/perl 
use CGI; 
use IPC::Run3; 
my $CGI = new CGI; 

my $output; 
if (defined $CGI->param('go') && 'restart' eq $CGI->param('go')) { 
    run3 [ qw(sudo /etc/init.d/tomcat5.5 restart) ], \undef, \$output, \$output; 
} 

print <<EOF 
Content-type: text/html 

Blah, blah, blah, HTML form, displays $output at some point. 
EOF 

Вот пример строки из/и т.д./sudoers (используйте visudo для редактирования, конечно):

ALL  ALL=(root) NOPASSWD: /etc/init.d/tomcat5.5 restart 

Это позволяет каждому перезапустить Tomcat , Вы можете ограничить его Apache, только если хотите.

+0

Это было прекрасно. Благодаря! – ScArcher2 2008-12-10 19:31:24

0

Я бы использовал сценарий CGI. Задайте его для запуска от имени root и вызовите '/etc/init.d/tomcat restart' (или, тем не менее, вы перезапустите tomcat в своем поле).