2016-08-31 2 views
1

je veux redémarrer apache2 quand je charge une page avec le code suivant:Redémarrez apache2 via un script PHP

exec('/etc/init.d/apache2 reload', $output, $return); 
if(!$return) { 
    $result = "<script>console.log('can not restart apache2');</script>"; 
    echo $result; 
    echo $output; 
} else { 
    $result = "<script>console.log('restart apache2 successfuly');</script>"; 
    echo $result; 
} 

Et dans le fichier etc/sudoers j'ajouter ces lignes:

Cmnd_Alias  RESTART_APACHE = /etc/service apache2 restart 
www-data ALL=NOPASSWD: RESTART_APACHE 

Mais le retour de résultat can not restart apache2.

Suis-je quelque chose de mal?

+0

essayé '' –

+3

double possible de [pourquoi commande php \ 'exec ("service de redémarrage apache2") ?; \ 'ne pas w ork sur ubuntu?] (http: // stackoverflow.com/questions/8202887/pourquoi-php-command-execservice-apache2-restart-faire-travailler-sur-ubuntu) – cb0

+0

Votre sudoers dit que le redémarrage est autorisé mais que vous rechargez dans votre exec(). C'est une très mauvaise idée en termes de sécurité, pourquoi voulez-vous cela? Pourquoi ne pas rester avec l'accès SSH, ou un moniteur de processus ou quelque chose? – jedifans

Répondre

0

Le service Apache DonT probablement le droit de se relancer

0

@tuanptit
<?php echo shell_exec('service httpd restart &'); ?>

Vous pourriez avoir des problèmes avec les autorisations d'un tel script essayant de le faire bien. Il semble que vous soyez dans un environnement de développement complet, donc cela ne devrait pas vous importer de lui accorder des privilèges élevés.

Mais la meilleure façon de gérer cela, à mon humble avis, est de donner à l'utilisateur qu'Apache fonctionne sous l'accès pour redémarrer Apache via le sudo command.

Vous voulez modifier votre fichier/etc/sudoers et ajouter des lignes similaires à ce qui suit:

Cmnd_Alias  RESTART_APACHE = /sbin/service apache2 restart 

www-data ALL=NOPASSWD: RESTART_APACHE 

Vous devrez peut-être nobody au lieu de www-data, cela dépend de l'utilisateur, qui fonctionne sous Apache. Sur Debian, Apache tourne généralement sous l'utilisateur www-data, alors que sous Red Hat, souvent Apache fonctionne sous l'utilisateur nobody. En outre, le /sbin/service apache2 restart peut devoir être /sbin/service apache restart ou peut-être /sbin/service httpd restart. Tout dépend de la configuration de votre système.

Une fois cela fait, en PHP, vous pouvez utiliser le code: (. Il est évident que le changement que si la commande pour redémarrer Apache est différent sur votre serveur)

exec('/sbin/service apache2 restart'); 

S'il vous plaît noter: cela pourrait très bien être considéré comme un risque de sécurité! Si vous faites cela, vous faites entièrement confiance l'sudo binaire, le binaire service, et votre système d'obéir aux règles et ne pas laisser un processus Apache/PHP obtenir un shell root. Je recommande fortement de demander au http://serverfault.com pour les implications de ce que vous faites ici.

+0

J'ai changé pour utiliser cette ligne '' Mais ne fonctionne pas, c'est dire 'httpd: service non reconnu' dans le fichier error.log dans apache et je ne peux pas trouver'/sbin/service' dans le serveur – tuanptit

0

La solution déjà discuté ici.

How do you restart Apache with a (web) button click?

Dans les sudoers fichiers que vous avez "restart", dans le fichier php que vous avez "reload"

Vérifiez si vous devez utiliser/sbin/service au lieu de/etc/services

Assurez-vous que les commandes correspondent en PHP et le fichier sudoer