I'm playing around with my VM and the code I'm developing requires that I restart apache every time to capture the changes. I thought it would be nice to just have a bookmarklet, or link or button click I could run to do this. Any thoughts on how to accomplish this with PHP on a CentOS 5 dev VM?
问题:
回答1:
As Marc B said, you need root privs to be able to restart Apache. The best way to handle this, IMHO, is to give the user that Apache runs under access to restart Apache via the sudo
command.
You'll want to edit your /etc/sudoers
file and add lines similar to the following:
Cmnd_Alias RESTART_APACHE = /sbin/service apache2 restart
www-data ALL=NOPASSWD: RESTART_APACHE
You may need nobody
instead of www-data
, it depends on the user which Apache runs under. On Debian, Apache typically runs under user www-data
, whereas under Red Hat, often Apache runs under user nobody
. Also, the /sbin/service apache2 restart
may need to be /sbin/service apache restart
or maybe /sbin/service httpd restart
. All depends on your system's configuration.
Once that's done, in PHP you can use the code:
exec('/sbin/service apache2 restart');
(Obviously changing that if the command to restart Apache differs on your server.)
Please note: this could very well be considered a security risk! If you do this, you fully trust the sudo
binary, the service
binary, and your system to obey the rules and not let an Apache/PHP process get a root shell. I highly recommend asking on http://serverfault.com for the implications of what you're doing here.
回答2:
<?php echo shell_exec('service httpd restart &'); ?>
You might have permissions problems with such a script attempting to do this though. It sounds like you're in a full-on dev environment though, so it shouldn't matter for you to give elevated privileges to it.
回答3:
A file contains the process ID for apache. Just send a HUP to it. A simple script (sh) could be written to achieve this - and place it in the cgi-bin directory.
回答4:
If you are using linux, you can write a shell script to take care for you.
e.g.
if [ $? -ne 0 ] # if apache not running
then
# restart apache
$RESTART
More details on this blog: http://www.droidmsg.com/blog/?p=146