[PHP] Apache reboot via php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BastiaanN
  • Registratie: September 2003
  • Niet online
Hoi iedereen,

ik zit met een klein probleem, ik probeer vanaf een php script apache te herstarten. nu gaat dit met het commando "apachectl restart" prima, maar zodra ik een eigen script aanprobeer te roepen, die 2 commando's uitvoert ( apachectl stop en apachectl -D school ) dit klinkt misschien raar maar is voor mij nodig omdat apache dan een aparte configuratie inlaad.

nu het probleem; zodra ik het script aanroep voert tie het eerste commando uit en daarna kapt tie er mee omdat httpd uit is en dus php wordt gecanceld.. als background process wil het ook niet.. ( tenminste niet zoals ik het nu heb )

PHP:
1
exec('sudo php /var/www/misc/disable_school_mode.php > /dev/null &');


dus, is er een manier dat ik door php een background process kan laten starten die blijft doordraaien ongeacht of de browser gesloten wordt of dat het script stopt?

Bedankt voor de reacties alvast!

Strava | :-( + ┌(^0^)┘= :-)


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Kun je niet een bash scriptje schrijven dat je aanroept vanuit PHP? Daarin kun je dan de beide commando's doorgeven aan Apache. Ik denk dat het via PHP zelf vrij lastig if not onmogelijk is.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Wil je eigenlijk je apache proces wel root rechten geven op die machine? Met sudo gaat het je in ieder geval sowieso niet lukken als er een password is, want dat wordt dan interactief gevraagd :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • newpegasus
  • Registratie: Juni 2003
  • Laatst online: 13-03-2022

newpegasus

Hertog

jawel, sudo heeft heeft een file waarin users staan die toegelaten worden om sudo te runnen. sudoers heet deze file. zet daarin user apache en je kunt sudo gebruiken...

GuitarFacts | Last.fm | Google Zoekmachine Optimalisatie


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

dawuss schreef op maandag 21 november 2005 @ 22:26:
Wil je eigenlijk je apache proces wel root rechten geven op die machine? Met sudo gaat het je in ieder geval sowieso niet lukken als er een password is, want dat wordt dan interactief gevraagd :)
Gelukkig kun je dat met het visudo commande heel eenvoudig configureren waardoor je die wachtwoordvraag kan uitschakelen :) Overigens denk ik dat dit een vrij lastig probleem is wat je zonder externe applicatie niet op gaat lossen. Kun je bijvoorbeeld geen extern proces spawnen wat de herstart voor je uitvoert.

Waarom wil je eigenlijk Apache herstarten?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • BastiaanN
  • Registratie: September 2003
  • Niet online
-NMe- schreef op maandag 21 november 2005 @ 22:23:
Kun je niet een bash scriptje schrijven dat je aanroept vanuit PHP? Daarin kun je dan de beide commando's doorgeven aan Apache. Ik denk dat het via PHP zelf vrij lastig if not onmogelijk is.
Ik heb je raad opgevolgd, en even snel een bash script inelkaar geflanst ( nja eigenlijk gewoon apachectl wat uitgebreid. ) dit werkt prima via de ssh shell maar wederom weer niet in php :/
dawuss schreef op maandag 21 november 2005 @ 22:26:
Wil je eigenlijk je apache proces wel root rechten geven op die machine? Met sudo gaat het je in ieder geval sowieso niet lukken als er een password is, want dat wordt dan interactief gevraagd :)
in /etc/sudoers heb ik een paar commando's ingesteld die door de user 'apache' kunnen worden gebruikt zonder een wachtwoord ( apachectl, mijn zelf gemaakte bestanden,php ) , dus dit is denk ik het probleem niet, als ik inlog als apache en die regel uitvoer zoals ik hem heb gepost, werkt het prima...

Strava | :-( + ┌(^0^)┘= :-)


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Spider.007 schreef op maandag 21 november 2005 @ 22:31:
[...]

Gelukkig kun je dat met het visudo commande heel eenvoudig configureren waardoor je die wachtwoordvraag kan uitschakelen :) Overigens denk ik dat dit een vrij lastig probleem is wat je zonder externe applicatie niet op gaat lossen. Kun je bijvoorbeeld geen extern proces spawnen wat de herstart voor je uitvoert.

Waarom wil je eigenlijk Apache herstarten?
Ah tuurlijk. Ik wist wel dat je in die sudoers file de rechten kon aanpassen, maar dat je password interactive mode ook uit kon zetten was bij mij nog niet bekend :)

Blijft de vraag: Wil je dat iedereen met rechten op je webserver de rechten heeft om apache te restarten?

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • BastiaanN
  • Registratie: September 2003
  • Niet online
Spider.007 schreef op maandag 21 november 2005 @ 22:31:
[...]

Gelukkig kun je dat met het visudo commande heel eenvoudig configureren waardoor je die wachtwoordvraag kan uitschakelen :) Overigens denk ik dat dit een vrij lastig probleem is wat je zonder externe applicatie niet op gaat lossen. Kun je bijvoorbeeld geen extern proces spawnen wat de herstart voor je uitvoert.

Waarom wil je eigenlijk Apache herstarten?
er staan in mijn config file een paar IfDefine regels, als dan een bepaalde optie is meegeven via -D bij het opstarten van apache worden alle configuratie settings die daar in staan ook meegenomen. we zitten bij sommige mensen waar we liever de dingen afgeschermd hebben en zodra er dan gestart wordt met de -D optie is de hele server in 1 klap beveiligd, en thuis hebben we hem liever openstaan aangezien het nogal vervelend werken is met 300x zo'n .htaccess venster naar je hoofd.

De server is overigens dedicated en beschikbaar voor een groep van 4 personen, die ik graag via dit script allemaal de mogelijk wil geven om de server op deze manier te herstarten.

[ Voor 9% gewijzigd door BastiaanN op 21-11-2005 22:36 ]

Strava | :-( + ┌(^0^)┘= :-)


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

En als je apachectl als background process start? (& op het eind van de command regel)

Acties:
  • 0 Henk 'm!

Verwijderd

En als je het uitvoert in een 'screen'?

Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

TheBorg schreef op maandag 21 november 2005 @ 22:39:
En als je apachectl als background process start? (& op het eind van de command regel)
Volgens mij is die ampersand een bash feature om spul op de achtergrond te draaien. Dan lijkt screen, of een andere manier om te detachen me beter.

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt ook een cronjob maken dat controleert of een bepaald bestand bestaat en dan apache restart. Dat bestand maak je dan aan wanneer je apache gerestart wil hebben. Je hebt dan wel een kleine vertraging, maar toch...

Acties:
  • 0 Henk 'm!

  • BastiaanN
  • Registratie: September 2003
  • Niet online
Dit werkte helaas niet, ook niet met het opgeven van detach
Verwijderd schreef op maandag 21 november 2005 @ 22:44:
Je kunt ook een cronjob maken dat controleert of een bepaald bestand bestaat en dan apache restart. Dat bestand maak je dan aan wanneer je apache gerestart wil hebben. Je hebt dan wel een kleine vertraging, maar toch...
Ik ga maar voor deze optie dat moet gewoon werken :) even wachten moet kunnen

Iedereen hartelijk bedankt voor de reacties! :)

Strava | :-( + ┌(^0^)┘= :-)


Acties:
  • 0 Henk 'm!

Verwijderd

Misschien een rare suggestie hoor, maar ooit aan PHP-CLI gedacht? Je PHP script wat apache herstart roep je dan aan vanuit een 'apache-php' script, maar op de CLI wijze.

Dus bv. in je 'apache PHP script':

PHP:
1
2
3
<?php
  exec('/mijn/scripts/restartapache.php&');
?>


en in je 'restart script:

PHP:
1
2
3
4
5
#!/usr/bin/php
<?php
  exec('/pad/naar/apache/apachectl stop');
  exec('/pad/naar/apache/apachectl start');
?>


Werkt als een tiet, zonder vertragingen en geheel in PHP :)

[ Voor 20% gewijzigd door Verwijderd op 21-11-2005 23:15 ]


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

In Perl werkt het wel:
code:
1
2
3
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
system("/usr/local/apache/bin/apachectl restart");

Als je genoeg rechten hebt.

-edit-
Of zie boven voor de PHP variant. :+

[ Voor 19% gewijzigd door TheBorg op 21-11-2005 23:40 ]


Acties:
  • 0 Henk 'm!

Verwijderd

@TheBorg: om dezelfde redenen waarom mijn oplossing werkt. Omdat jouw Perl en mijn PHP-CLI niet onder apache draaien.. en dus niet verstoord worden als apache herstart wordt..

Acties:
  • 0 Henk 'm!

  • _JGC_
  • Registratie: Juli 2000
  • Laatst online: 07:10
Hmm, had hetzelfde met het webhosting panel bij een ISP als stageproject. Omdat toch zeer waarschijnlijk de webserver niet op dezelfde machine zou draaien als het webhosting panel, heb ik gewoon met perl en XML-RPC een servertje gemaakt die je na authenticatie kunt aanroepen uit elke willekeurige taal. Bij het testen meteen al het eerste nadeel: bij het aanroepen was PHP meteen doodgemept, leuke witte pagina. Oplossing: threaded server gemaakt, op moment dat request binnenkomt wordt de kill-thread actief en doet ie na een sleep van 2 seconden wat ie moet doen: een -HUP naar apache sturen.
Pagina: 1