dambi
Goto Top

php script unter linux als daemon

Ich habe ein PHP Script und will jetzt das meine Linux Maschine dieses Script immer nach 5 minuten ausführt. wie kann ich das machen, dass er erstens das php script ausführt und zweitens dass der server das im hintergrund immer macht, sprich als daemon.


ich habe gerade gesehen, dass man php scripts in shells integrieren kann. wie muss ich denn das machen? denn ich glaube ein shell als daemon einzurichten ist eifacher!

wäre froh, wenn mir jemand weiterhelfen könnte, da das ein Teil meiner Abschlussprüfung ist und ich das brauche.

falls das noch zu wenige informationen sind, dann meldet euch einfach bei mir ich gebe natürlich auch gerne noch mehr infos! ich weiss eifach nicht was ihr alles braucht damit das geht. also verzeiung das ich nicht infos geben kann aber ich weiss ja nicht was man braucht und wie es geht face-smile


danke vielmals


gruss dambi

Content-Key: 26670

Url: https://administrator.de/contentid/26670

Ausgedruckt am: 29.03.2024 um 05:03 Uhr

Mitglied: heyko
heyko 22.02.2006 um 16:08:23 Uhr
Goto Top
DU benötigst php-cli um Scripte per Shell ausführen zu können. Und dann trägst du das Script als Crontab in Form von

nohup php /pfad/zu/deinem/script.php &

ein.

Schon wird es regelmäßig gestartet und die Ausgabe im nohup.log gespeichert.
Mitglied: Dambi
Dambi 22.02.2006 um 16:17:44 Uhr
Goto Top
ich bin leider nicht der linux crack face-sad

was heisst:

Und dann trägst du das Script als Crontab in Form von

nohup php /pfad/zu/deinem/script.php &

ein.
???????

wie wo was muss ich das machen ? face-smile

sorry für meine fragen aber wie schon gesagt bin nicht der linux crack face-smile

danke schon mal!!!!!!!
Mitglied: cykes
cykes 22.02.2006 um 16:29:58 Uhr
Goto Top
@heyko, ich glaub das "nohup" am Anfang kann man sich in einem Cron-Job irgendwie sparen,
oder? Ich kenn mich ned so mit PHP aus, aber ganz allgemein is das in nem crontab doch
überflüssig!?


Gruss

cykes
Mitglied: Guenni
Guenni 22.02.2006 um 16:51:19 Uhr
Goto Top
@Dambi

Hi,

unter http://www.sequenz.ch/blog/archive/2003/12/07/crontab-beispiel.html

findest du eine Beschreibung des Formats einer Cron-Job-Datei, ein paar Beispiele
und wie du einen Cron-Job anlegst.

Gruß
Günni
Mitglied: heyko
heyko 22.02.2006 um 17:00:32 Uhr
Goto Top
@heyko, ich glaub das "nohup" am
Anfang kann man sich in einem Cron-Job
irgendwie sparen,
oder? Ich kenn mich ned so mit PHP aus, aber
ganz allgemein is das in nem crontab doch
überflüssig!?


Gruss

cykes


naja eigentlich hast du recht dann aber

php /pfad/zum/script.php &> /dev/null

damit die ausgabe verschwindet und man nicht diese nervigen cronmails bekommen

und @Dambi

die /etc/cron/crontab datei öffnen und folgende zeile hinzufügen

*/5 * * * * benutzername php /pfad/zum/script.php &> /dev/null
Mitglied: Dambi
Dambi 23.02.2006 um 14:16:02 Uhr
Goto Top
und wie wird der zeitinterwall eingestellt??? ich will das es alle 5 minuten das script wieder ausführt!

danke
Mitglied: heyko
heyko 23.02.2006 um 14:20:28 Uhr
Goto Top
die 5 sterne am anfang stehen für

minute stunde tag woche jahr ... d.h. in dem beispiel /5 bedeutet alle 5 minuten
Mitglied: Dambi
Dambi 06.03.2006 um 08:37:18 Uhr
Goto Top
sorry hatte ferien und konnte es nicht anschauen.

jetzt habe ich gar nichts unter /etc/cron/crontab!


muss ich da was installieren damit ich das habe?? wenn ja was???

gruss dambi

#edit

ich habe unter /etc/ nur:
cron.d --> ist nichts drin
cron.daily --> da sind so komische dateien drin wie "clean_catman" do_mandb" usw.
cron.hourly --> da ist nichts drin
cron.mounthly --> da ist nichts drin
cron.weekly --> da ist nichts drin

ich habe unter yast "cron" installiert, doch es hat sich nichts geändert!

was muss ich denn machen damit ich das machen kann was ihr beschrieben habt???

danke gruss dambi


#edit nr.2

ich habe jetzt einmal crontab -l gemacht und habe nichts gesehen. dann habe ich im man gesehen dass man crontab -e muss machen damit man etwas einfügen kann. das habe ich auch gemacht. ich habe folgendes gemacht:

crontab -e

dann das herein geschreiben:
*/5 * * * * root php /srv/www/htdocs/check.php &> /dev/null

und wenn ich jetzt crontab -l mache, kommt das:

  1. DO NOT EDIT THIS FILE - edit the master and reinstall.
  2. (/tmp/crontab.4478 installed on Mon Mar 6 09:06:27 2006)
  3. (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
*/5 * * * * root php /srv/www/htdocs/check.php &> /dev/null

hat der das jetzt unter /tmp/crontab.4478 hineingeschrieben? bis jetzt ist das script noch nicht gegangen obwohl ich 5 minuten eingestellt habe. irgendwie funktioniert das nicht so face-smile

gruss dambi
Mitglied: Dambi
Dambi 06.03.2006 um 10:53:25 Uhr
Goto Top
also ich dachte ich mach nicht noch einmal ein #edit nr. 3 face-smile

es geht jetzt und zwar war etwas falsch!

der Username root kann man so nicht angeben. deswegen ist es nie gegangen. ich habe es jetzt so ausprobiert:

*/5 * * * * php /srv/www/htdocs/check.php &> /dev/null

und das geht. so geht es nicht:

*/5 * * * * root php /srv/www/htdocs/check.php &> /dev/null

denn wenn man normal in der command line das eingibt:
root php /srv/www/htdocs/check.php &> /dev/null

geht es auch nicht und wenn man das eingibt:
php /srv/www/htdocs/check.php &> /dev/null

dann geht es.

also das ist die Lösung. Danke für eure Hilfe!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

jetzt habe ich aber doch noch eine frage:

ich habe einen befehl, welche ich ausführen muss, damit der syslog server alle meldungen in eine datenbank schreibt und diesen befehl gibt man ein und dann kann man nicht mehr auf diesem command fenster arbeiten. wenn ihr versteht was ich meine.

es ist immer aktiv wenn man den eingibt wie "tail -f /var/log/messages". der befehl lautetet:

mysql -u root --password=passwort syslog < /var/log/mysql.pipe

jetzt will ich diesen befehl aber als dienst einrichten, damit ich das nicht immer ausführen muss und ich nicht ein extra command fenster öffnen muss. wie kann ich das machen, dass dieser befehl sich beim start automatisch ausführt und immer im hintergrund läuft? könnt ihr mir da auch noch helfen? wäre sehr dankbar!

danke

gruss dambi


  1. edit

also ich habe das jetzt so gelöst, dass ich unter /etc/init.d/boot.local folgendes eingetragen habe:
mysql -u syslogfeeder --password=<password> syslog < /var/log/mysql.pipe &

es geht!

ich weiss nicht ob das die schönste lösung ist, aber si funktioniert.

was meint ihr? das sollte doch gut sein so oder?

gruss dambi
Mitglied: stpe
stpe 12.03.2006 um 14:50:41 Uhr
Goto Top
also ich habe das jetzt so gelöst, dass ich unter /etc/init.d/boot.local folgendes eingetragen
habe:
mysql -u syslogfeeder --password= syslog < /var/log/mysql.pipe &
So ist das ok.

Zum PHP-Problem: Du kannst ein PHP-Script auch direkt ausführen (also ohne "php script.php"). Füge als erste Zeile in Deinem PHP-Script einfach einen Shebang auf das PHP-Binary zu. Oder in einfach:
#!/usr/local/bin/php
Dann das PHP-Script mit "chmod +x script.php" ausführbar machen. Und schon lässt es sich einfach über seinen Dateinamen: script.php starten.

Gruss
Stefan