/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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.


Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste