|
| Genstart apache på en Linux-spand? Fra : Kasper Johansen |
Dato : 28-11-04 17:51 |
|
Hej gruppe.
Når jeg prøver at genstarte Apache får jeg at vide at det fejlede. Jeg
regner med at dette sansynligvis er fordi at programmet som prøver ikke
kan genstarte sig selv (jeg bruger exec()).
Jeg hørte fra en ven at man skulle køre det fra et andet program (eller
sådan noget lignende).
Er der nogen der har erfaringer med dette og i så fald kan vise mig
hvordan det skal gøres korrekt?
Mvh
Kasper Johansen
| |
Simon Lyngshede (28-11-2004)
| Kommentar Fra : Simon Lyngshede |
Dato : 28-11-04 18:33 |
|
On Sun, 28 Nov 2004 17:50:33 +0100, Kasper Johansen wrote:
> Hej gruppe.
>
> Når jeg prøver at genstarte Apache får jeg at vide at det fejlede. Jeg
> regner med at dette sansynligvis er fordi at programmet som prøver ikke
> kan genstarte sig selv (jeg bruger exec()).
>
> Jeg hørte fra en ven at man skulle køre det fra et andet program (eller
> sådan noget lignende).
>
> Er der nogen der har erfaringer med dette og i så fald kan vise mig
> hvordan det skal gøres korrekt?
>
Øøøh er det ikke bare "apachectl restart" ?
--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.
| |
Kasper Johansen (28-11-2004)
| Kommentar Fra : Kasper Johansen |
Dato : 28-11-04 18:47 |
|
Simon Lyngshede wrote:
> Øøøh er det ikke bare "apachectl restart" ?
Jo, men den gider ikke udfører det ved hjælp af exec()-kommandoen.
Ellers havde det skam været let nok.
Jeg har prøvet med:
exec("etc/init.d/apache restart");
exec("etc/sbin/apachectl restart");
exec("etc/sbin/apachectl graceful");
Ingen af dem syntes at virke :( Og hvis de melder tilbage melder de at
de er fejlet.
Hvis jeg så går i promt og genstarter (på samme måde) virker det fint.
Mvh
Kasper Johansen
| |
Simon Lyngshede (28-11-2004)
| Kommentar Fra : Simon Lyngshede |
Dato : 28-11-04 20:16 |
|
On Sun, 28 Nov 2004 18:46:41 +0100, Kasper Johansen wrote:
>
> Jeg har prøvet med:
>
> exec("etc/init.d/apache restart");
> exec("etc/sbin/apachectl restart");
> exec("etc/sbin/apachectl graceful");
>
> Ingen af dem syntes at virke :( Og hvis de melder tilbage melder de at
> de er fejlet.
>
> Hvis jeg så går i promt og genstarter (på samme måde) virker det fint.
>
Tør man spørge hvorfor du har behov for at bruge exec ?
--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.
| |
Simon Lyngshede (28-11-2004)
| Kommentar Fra : Simon Lyngshede |
Dato : 28-11-04 20:33 |
|
On Sun, 28 Nov 2004 20:16:14 +0100, Simon Lyngshede wrote:
> On Sun, 28 Nov 2004 18:46:41 +0100, Kasper Johansen wrote:
>>
>> Jeg har prøvet med:
>>
>> exec("etc/init.d/apache restart");
>> exec("etc/sbin/apachectl restart");
>> exec("etc/sbin/apachectl graceful");
>>
>> Ingen af dem syntes at virke :( Og hvis de melder tilbage melder de at
>> de er fejlet.
>>
>> Hvis jeg så går i promt og genstarter (på samme måde) virker det fint.
>>
Prøvede mig lige lidt frem. Man kan ikke bruge apachectl, som du siger,
men man kan bruge exec, hvis man kan leve med at dele processen op i to
exec kill `cat /var/www/logs/httpd.pid`
exec httpd
--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.
| |
Kasper Johansen (28-11-2004)
| Kommentar Fra : Kasper Johansen |
Dato : 28-11-04 20:57 |
|
Simon Lyngshede wrote:
> exec kill `cat /var/www/logs/httpd.pid`
> exec httpd
Jeg kan ikke finde min httpd.pid... Kan se den ligger under logs, så det
er vel i Apache-arkivet jeg skal ind og ændrer noget under vhosts? Eller..?
Mvh
Kasper Johansen
| |
Kasper Johansen (28-11-2004)
| Kommentar Fra : Kasper Johansen |
Dato : 28-11-04 21:07 |
|
Simon Lyngshede wrote:
> Prøvede mig lige lidt frem. Man kan ikke bruge apachectl, som du siger,
> men man kan bruge exec, hvis man kan leve med at dele processen op i to
>
> exec kill `cat /var/www/logs/httpd.pid`
> exec httpd
Jeg syntes heller ikke at dette gider at virke. Jeg fandt mig frem til
apache.pid (1065) havde den (og den lukkede da også Apache når jeg
prøvede manualt).
Hvis jeg prøver i PHP sker der bare intet. Jeg tror det er fordi at
processen ikke kan lukke sig selv. Derfor, er det ikke muligt at time et
program til at køre om f.eks. 5 sekunder?
Jeg har også prøvet med sudo (for at køre processen som root, men det
hjalp heller ikke).
Mvh
Kasper Johansen
| |
Simon Lyngshede (28-11-2004)
| Kommentar Fra : Simon Lyngshede |
Dato : 28-11-04 21:36 |
|
On Sun, 28 Nov 2004 21:07:02 +0100, Kasper Johansen wrote:
> Simon Lyngshede wrote:
>> Prøvede mig lige lidt frem. Man kan ikke bruge apachectl, som du siger,
>> men man kan bruge exec, hvis man kan leve med at dele processen op i to
>>
>> exec kill `cat /var/www/logs/httpd.pid`
>> exec httpd
>
> Jeg syntes heller ikke at dette gider at virke. Jeg fandt mig frem til
> apache.pid (1065) havde den (og den lukkede da også Apache når jeg
> prøvede manualt).
>
> Hvis jeg prøver i PHP sker der bare intet. Jeg tror det er fordi at
> processen ikke kan lukke sig selv. Derfor, er det ikke muligt at time et
> program til at køre om f.eks. 5 sekunder?
>
> Jeg har også prøvet med sudo (for at køre processen som root, men det
> hjalp heller ikke).
>
Aaah, min fejl, jeg havde ikke lige helt fået fat i at det var PHPs exec
du ville bruge, troede det var fra en shell.
Har du kigget på hvad der står i Apaches error log, det er ofte et par
hints til hvor det er det går galt for PHP.
En løsning jeg ikke har testet kan være at lave et shell script der
genstarter Apache, enten med kill som overfor eller bare direkte kalder
apachectl. chown root:root <script>, chmod 4711 <script> og så kalde det
med PHPs shell_exec. Jeg har ikke testet det, min Apache er
chrooted og PHP vil aldrig kunne stoppe Apache.
Så f.eks kunne scriptet være:
#!/bin/sh
exec kill `cat <PATH_TO_PID_FILE>` &
exec httpd
Af ren nysgerrihed... hvorfor er det du vil genstarte Apache fra php?
--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.
| |
Kim Andersen (29-11-2004)
| Kommentar Fra : Kim Andersen |
Dato : 29-11-04 12:34 |
|
Har det noget at gører med at PHP brugeren ikke har rettigheder til at må
afvilke "apachectl restart" ?
Og der først skal gives adgang til dette.
/Kim
| |
Simon Lyngshede (29-11-2004)
| Kommentar Fra : Simon Lyngshede |
Dato : 29-11-04 18:08 |
|
On Mon, 29 Nov 2004 12:34:05 +0100, Kim Andersen wrote:
> Har det noget at gører med at PHP brugeren ikke har rettigheder til at må
> afvilke "apachectl restart" ?
> Og der først skal gives adgang til dette.
>
Kort, JA
Men det er nu Apache brugeren, der er ikke nogen PHP bruger.
--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.
| |
Kasper Johansen (30-11-2004)
| Kommentar Fra : Kasper Johansen |
Dato : 30-11-04 17:26 |
|
Simon Lyngshede wrote:
> En løsning jeg ikke har testet kan være at lave et shell script der
> genstarter Apache, enten med kill som overfor eller bare direkte kalder
> apachectl. chown root:root <script>, chmod 4711 <script> og så kalde det
> #!/bin/sh
> exec kill `cat <PATH_TO_PID_FILE>` &
> exec httpd
> Af ren nysgerrihed... hvorfor er det du vil genstarte Apache fra php?
Vil gerne have reloaded mine vhosts, i og med at det skal være muligt at
tilføje subdomæner direkte fra samme side. Derved at en total
computer-idiot kan tilføje subdomæner uden at kende noget til vhosts
eller andet sjov på en Linux maskine.
Har tænkt det skulle udgives som noget Open Source når jeg engang fik
det op og køre.
Får denne fejl efter at have gjort som du sagde.
Array ( ) Array ( [0] => /usr/sbin/apachectl restart: httpd not
running, trying to start [1] => /usr/sbin/apachectl restart: httpd could
not be started )
For mig ser det ud som om at den ikke kan se at den allerede kører?
Mvh
Kasper Johansen
| |
Kasper Johansen (30-11-2004)
| Kommentar Fra : Kasper Johansen |
Dato : 30-11-04 17:51 |
|
Fik det til at virke ved hjælp af programmet "sudo". Jeg var dog ikke
klare over hvordan og hvorledes sudo først skulle sættes op.
I Debian kan man få programmet ved hjælp af "apt-get install sudo".
Derefter kan man gå ind i "visudo" og tilføje linjen (under "root
ALL=(ALL) ALL"):
www-data ALL = NOPASSWD: ALL
Derefter burde man kunne køre denne kommando for at få genstartet apache
i PHP:
echo exec("apachectl restart");
Den burde gerne returnere: "httpd restarted".
-Kasper Johansen
| |
Peter Brodersen (30-11-2004)
| Kommentar Fra : Peter Brodersen |
Dato : 30-11-04 18:11 |
|
On Tue, 30 Nov 2004 17:51:08 +0100, Kasper Johansen
<kasper@johansen.tdcadsl.dk> wrote:
>www-data ALL = NOPASSWD: ALL
Hm, såvidt jeg kan se, tillader du at www-brugeren kan køre alle
programmer som root... må jeg anbefale, at du begrænser det til
apachectl? Fx:
www-data ALL = NOPASSWD: /usr/sbin/apachectl
>echo exec("apachectl restart");
Jeg vil tro, at du skal køre:
echo exec("sudo apachectl restart");
Jeg ved dog ikke, hvad effekten er, at et webscript så at sige trækker
tæppet væk under sig selv. Men det kan man jo let afprøve :)
--
- Peter Brodersen
| |
Simon Lyngshede (30-11-2004)
| Kommentar Fra : Simon Lyngshede |
Dato : 30-11-04 18:18 |
|
On Tue, 30 Nov 2004 17:51:08 +0100, Kasper Johansen wrote:
> Fik det til at virke ved hjælp af programmet "sudo". Jeg var dog ikke
> klare over hvordan og hvorledes sudo først skulle sættes op.
>
> I Debian kan man få programmet ved hjælp af "apt-get install sudo".
> Derefter kan man gå ind i "visudo" og tilføje linjen (under "root
> ALL=(ALL) ALL"):
>
> www-data ALL = NOPASSWD: ALL
>
> Derefter burde man kunne køre denne kommando for at få genstartet apache
> i PHP:
>
> echo exec("apachectl restart");
>
> Den burde gerne returnere: "httpd restarted".
>
dagens sikkerheds tip, at tillade Apache at eksekvere alle kommandorer
igennem sudo og uden password er ikke en god ide.
www-data ALL = NOPASSWD: /usr/sbin/apachectl
Er nok lidt mere sikkert.
--
Simon Lyngshede
simon@giraf.spiceweasel.dk
Remove long necked animal.
| |
|
|