Permalänk
Medlem

Starta om apache via php

Hej..

Har precis krivit ihop ett webgränssnitt för att lägga till/ta bort/ändra i mina vhosts på servern. Skulle vilja komplettera detta med en möjlighet att starta om apache på sidan....

började med detta:
$h = shell_exec("/etc/init.d/httpd restart");
echo "<pre>$h</pre>";

det returnerade:

Stopping httpd
httpd (pid 10811?) not running
Starting httpd

jag antar att användaren apache inte har rättighet att starta om httpd.. kan jag göra något åt detta? Hur kan man lösa det på bästa sätt?

Det ser ju faktiskt ut som om det startas okej.. nån som vet?

Visa signatur
Permalänk
Hedersmedlem

Du bör/ska använda "apachectl restart" eller ännu hellre "apachectl graceful" för att starta om apache.

Permalänk
Medlem

skillnad på restart och graceful Kennel?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Kennel
Du bör/ska använda "apachectl restart" eller ännu hellre "apachectl graceful" för att starta om apache.

Jag får ungefär samma output med apachectl graceful...

Httpd is not running, trying to start...

Visa signatur
Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Crawen

skillnad på restart och graceful Kennel?

usage: /usr/local/apache/bin/apachectl (start|stop|restart|fullstatus|status|graceful|configtest|help) start - start httpd stop - stop httpd restart - restart httpd if running by sending a SIGHUP or start if not running fullstatus - dump a full status screen; requires lynx and mod_status enabled status - dump a short status screen; requires lynx and mod_status enabled graceful - do a graceful restart by sending a SIGUSR1 or start if not running configtest - do a configuration syntax test help - this screen

Citat:

Ursprungligen inskrivet av ragnwald

Jag får ungefär samma output med apachectl graceful...

Httpd is not running, trying to start...

Är du säker på att det är "rätt" apachectl du kör? Du kanske har installerat apache själv ovanpå en existerande installation som följde med din distribution?

Jag sitter även och funderar på vad som skall hända med PHP (som jag förmodar körs som en modul till Apache) när Apache startas om.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Kennel
Är du säker på att det är "rätt" apachectl du kör? Du kanske har installerat apache själv ovanpå en existerande installation som följde med din distribution?

Jag är väldigt säker på att det är rätt apachectl.. har installerat apache själv utan nånting under... Det fungerar när ja kör det i consolen....

Visa signatur
Permalänk
Medlem

Felen som du får uppstår om jag försöker stoppa eller starta om apache som en vanlig användare. Så jag antar att du måste vara root för att få göra det du vill. Och det blir ju lite svårt att fixa det på ett enkelt sätt skulle jag tro.

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
Felen som du får uppstår om jag försöker stoppa eller starta om apache som en vanlig användare. Så jag antar att du måste vara root för att få göra det du vill. Och det blir ju lite svårt att fixa det på ett enkelt sätt skulle jag tro.

Jo.. det är väl kanske inte så säkert att sätta apache som 0:0?

Edit:

Kom på att man kanske skulle kunna fixa det på något annat sätt. Typ att php skapar en fil på ett ställe på hårddisken.. sen har man ett program/script som var 5:e minut kollar om den filen existerar.. om den gör det startar programmet/scriptet om apache och tar sedan bort "filen"..

Någon som skulle kunna hjälpa mig med detta eller något liknande?

Utgå från att jag inte kan nånting om c/c++/scriptning i linux

Visa signatur
Permalänk
Medlem

ragnwald: äsch. Var inte så feg...

Visa signatur

//cykze

Permalänk
Medlem

Fast det skulle väl annars gå att skriva ett program som körs som root som startar om apache.

Typ så här:

startaom.php
----
<?php exec("./startaOmApache"); ?>
----

startaOmApache.c
----
#include <stdlib.h>
int main()
{
system("/usr/local/apache/bin/apachectl graceful"); /* eller nåt */
}
----

Sen:
gcc startaOmApache.c -o startaOmApache
su
chown root:root startaOmApache
chmod u+s startaOmApache

Sen är det bara att surfa in till startaom.php. Men jag vet inte riktigt hur det blir om man startar om Apache från en PHP-sida med tanke på att phpmodulen som kör php-sidan är laddad från apache. Men Apache kan håller reda på det där. Testa!

edit: en ; för mkt slank in...

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
Fast det skulle väl annars gå att skriva ett program som körs som root som startar om apache.

Typ så här:

startaom.php
----
<?php exec("./startaOmApache"); ?>
----

startaOmApache.c
----
#include <stdlib.h>
int main()
{
system("/usr/local/apache/bin/apachectl graceful"); /* eller nåt */
};
----

Sen:
gcc startaOmApache.c -o startaOmApache
su
chown root:root startaOmApache
chmod u+s startaOmApache

Sen är det bara att surfa in till startaom.php. Men jag vet inte riktigt hur det blir om man startar om Apache från en PHP-sida med tanke på att phpmodulen som kör php-sidan är laddad från apache. Men Apache kan håller reda på det där. Testa!

Jag skulle kunna testa det, men blir det inte lite ungefär samma sak som jag gjorde i början?.. att anropa mitt init.dscript från php.. som i sin tur startar om apache?

EDIT:

Provade att skriva det programmet.. och det fungerar i consolen, dock inte från php....... men har du någon idé på hur man kan skriva det programmet jag beskrev längre upp i tråden?

Visa signatur
Permalänk
Medlem

Testade det som jag skrev och det fungerar. Kanske du inte hade angett rätt sökväg till programmet i php-skriptet? Testa med passthru("/www/blabla/startaom.php"); istället för exec().

edit: Du måste såklart även ha rätt sökväg till apachectl i .c-filen.

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
Testade det som jag skrev och det fungerar. Kanske du inte hade angett rätt sökväg till programmet i php-skriptet? Testa med passthru("/www/blabla/startaom.php"); istället för exec().

edit: Du måste såklart även ha rätt sökväg till apachectl i .c-filen.

Med passthru får jag samma output som tidigare..
"httpd not running, trying to start"

ediT: och ja skrev passthru("sökväg_till_c-programmet"); såklart istället för sökvägen till phpfilen

Visa signatur
Permalänk
Medlem

Hur ser en output ut om du kör "ls -l startaOmApache"?

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
Hur ser en output ut om du kör "ls -l startaOmApache"?

Det ser ut som följande:

-rwsr-xr-x 1 root root 4978 Jan 3 19:29 aprestart

Visa signatur
Permalänk
Medlem

Konstigt. Det borde fungera. Inte för att jag tror att det spelar någon roll, men du kör inte PHP i safe_mode?

Annars kan du ju göra som du sa med att lägga dit en fil med PHP-skripet, som kollas var femte minut.

aprestart.sh
----
#!/bin/sh

if [ -e /tmp/nuVillJagStartaOmApache ]
then
/usr/local/apache/bin/apachectl graceful
rm -f /tmp/nuVillJagStartaOmApache
fi
----

chown root:root aprestart.sh
chmod u+xs aprestart.sh

Sen lägger du in ett cronjobb:
crontab -e
och lägg till t ex:
*/5 * * * * /blabla/aprestart.sh

Testa om det fungerar

edit: u+xs skulle det ju vara...
men "s" behövs nog inte i det här fallet eftersom cronjobbet ändå körs som root. Så chmod +x aprestart.sh borde vara mer rätt.

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
Konstigt. Det borde fungera. Inte för att jag tror att det spelar någon roll, men du kör inte PHP i safe_mode?

Annars kan du ju göra som du sa med att lägga dit en fil med PHP-skripet, som kollas var femte minut.

aprestart.sh
----
#!/bin/sh

if [ -e /tmp/nuVillJagStartaOmApache ]
then
/usr/local/apache/bin/apachectl graceful
fi
----

chown root:root aprestart.sh
chmod u+xs aprestart.sh

Sen lägger du in ett cronjobb:
crontab -e
och lägg till t ex:
*/5 * * * * /blabla/aprestart.sh

Testa om det fungerar

edit: u+xs skulle det ju vara...

Nu ska vi se..

*/5 * * * * /sökväg/aprestart.sh
<-- vad är stjärnorna?..

crontab -e gav command not found här...... kör gentoo om det nu hjälper något..

Edit:

ska jag emerga något av dessa?....

* app-emacs/crontab-mode
Latest version available: 1.11
Latest version installed: [ Not Installed ]
Homepage: http://www.hgsc.bcm.tmc.edu/~harley/elisp/
Description: Mode for editing crontab files

* sys-apps/cronbase
Latest version available: 0.2.1-r1
Latest version installed: 0.2.1
Homepage: http://www.gentoo.org/
Description: The is the base for all cron ebuilds.

Visa signatur
Permalänk
Medlem

minut timme dag månad veckodag kommando

* står för alltid typ. Om alla fem (minut timme dag månad veckodag) är * så körs den varje minut. Om den första är t ex 3 och resten är *, så körs kommando varje timme då minuten är 3 (00:03, 01:03 osv). */5 betyder var femte.

Testa att "export EDITOR=nano" om din favoriteditor är nano och sen "crontab -e"

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
minut timme dag månad veckodag kommando

* står för alltid typ. Om alla fem (minut timme dag månad veckodag) är * så körs den varje minut. Om den första är t ex 3 och resten är *, så körs kommando varje timme då minuten är 3 (00:03, 01:03 osv). */5 betyder var femte.

Testa att "export EDITOR=nano" om din favoriteditor är nano och sen "crontab -e"

Fortfarande command not found på crontab....

Visa signatur
Permalänk
Medlem

hmm.

Testa det här då

su
(crontab -l && echo "*/5 * * * * /sökväg/aprestart.sh") | crontab -
kör sen crontab -l och kolla så att raden "*/5 * * * * /sökväg/aprestart.sh" finns där EN gång.
Jag lade till en "rm" i skriptet ovan också så att filen tas bort efter omstarten.

Visa signatur

//cykze

Permalänk
Medlem

nej det går inte =)... crontab finns inte.... är det inte något av de programmen ja nämnde som behöver installeras?

Visa signatur
Permalänk
Medlem

Jaså är inte det standard...

Har du "cron". Vad händer om du skriver cron som root?

Visa signatur

//cykze

Permalänk
Medlem

bash: cron: command not found

så blire...

Visa signatur
Permalänk
Medlem

Vet inte hur gentoo's packagesystem ser ut. Men du borde ju kunna lista tillgängliga package som har någon med cron att göra och sen installera dom.

Visa signatur

//cykze

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av cykze
Vet inte hur gentoo's packagesystem ser ut. Men du borde ju kunna lista tillgängliga package som har någon med cron att göra och sen installera dom.

testar....

Visa signatur