Hallo zusammen,
wie schon im Titel erwähnt, möchte ich 2 PHP- Scripte jeweils 10 Sekunden nach Systemstart automatisch starten.
Über die Kommandozeile funktionieren die Skripte, und können im Hintergrund ausgeführt werden.
Was mache ich falsch?
Hallo zusammen,
wie schon im Titel erwähnt, möchte ich 2 PHP- Scripte jeweils 10 Sekunden nach Systemstart automatisch starten.
Über die Kommandozeile funktionieren die Skripte, und können im Hintergrund ausgeführt werden.
Was mache ich falsch?
PHP Scrip per Cron @reboot 10 Sekunden nach Start im Hintergrund ausführen? Schau mal ob du hier fündig wirst!
Hallo,
und mit vollem Pfad zu php: /usr/bin/php und dem user www-data?
...- Scripte jeweils 10 Sekunden nach Systemstart automatisch starten.
BTW: Meine Empfehlung wäre, diese Scripte mit Hilfe einer timer unit und 30 Sekunden nach Systemstart automatisch starten zu lassen.
Danke für die schnelle Antwort, habs grad ausprobiert. Startet leider auch nicht.
Der Start von "timer.php" 1x pro Minute funktioniert einwandfrei. Rechte sind die gleichen...
Scheint mir, als können über Chron keine Programme im Hintergrund geöffnet werden?
Muss momentan immer nach einem Neustart über die Konsole mit
$ php var/www/mycode/server/socket_server.php &
$ php var/www/mycode/server/gpio_server.php &
die beiden Scripte starten, die dann im Hintergrund endlos laufen (ohne Probleme)
ZitatChrisChip schrieb: ...- Scripte jeweils 10 Sekunden nach Systemstart automatisch starten.
BTW: Meine Empfehlung wäre, diese Scripte mit Hilfe einer timer unit und 30 Sekunden nach Systemstart automatisch starten zu lassen.
Hört sich interessant an, aber auch kompliziert. Die Sekunden sind eigentlich eher zweitrangig, die habe ich nur mit eingebaut, da ich sicher gehen möchte dass die Datenbank bereits läuft.
2 PHP- Scripte jeweils 10 Sekunden nach Systemstart automatisch starten.
10 Sekunden ist schon etwas knapp. Probiere mal mit 30.
Servus !
zu spät.
..., aber auch kompliziert. ...
Ist es aber nicht. Du brauchst eine service unit (die nicht enabled sein muss) die deine Scripte startet. Und mit einer timer unit wird diese service unit gestartet.
Alles was du benötigst, und wie rpi444 schon anmerkte stellt dir systemd bereit mit seiner service unit
Wie du schon schreibst sind die Sekunden nur da, um sicher zu gehen dass die DB läuft. Dies kannst du din der service Unit als Abhängigkeit mit angeben. Dann kümmert sich systemd allein drum, wann das Skript zu starten ist.
Ok, danke. Hab von der Möglichkeit gehört und werd mich da mal genauer einlesen. Bevorzugen würde ich trotzdem die Lösung über den Crontab, da weniger Overhead und sehr einfach zu implementieren. Noch jemand eine Idee warum es nicht klappt?
Hab die Zeit auf 60 Sekunden erhöht und es wird auch gestartet, siehe htop:
Nach 60 Sekunden verschwinden beide Tasks, und die eigentlichen Skripte werden nicht ausgeführt
Also die & denke ich sind im Crontab überflüssig, hab ich zumindest noch nie verwendet.
Und soviel overhead ist das mit systemd doch auch nicht, vorallem erhältst du genau das was du willst, es stellt sicher dass beim Start des Skriptes die DB zur Verfügung steht.
EDIT: Jetzt seh ichs erst...wie erstellt du denn die cron Einträge? Um Einträge für den User pi anzulegen, einfach im Terminal crontab -e ausführen, und dorthin dann die gewünschten Einträge schreiben.
Ich trage die immer in etc/cronetab die Einträge ein. Funktioniert auch soweit einwandfrei. Welche '&' sind gemeint? Zum Schluss ist ja um den Task im Hintergrund zu starten und die anderen '&&' um die 60 Sekunden Wartezeit an die Ausführung des Script zu binden?
Stimmt evtl. was an der Syntax meiner Eingabe nicht?
cronetab -e hab ich grad versucht, wird angenommen. Leider gleiches Problem...
Ich fürchte, dass der user pi nicht berechtigt ist in /var/www (und tiefer) Programme (schreibend) auszuführen, sodass sich der Prozess wieder beendet.
Servus !
Danke für die vielen Tipps, habs jetzt herausgefunden. Lag an fehlenden Zugriffen auf Include's.
Könntest Du das bitte genauer beschreiben?
Welche '&' sind gemeint?
Die für den Hintergrundmodus
In PHP wird ein include doch so behandelt, als wäre der Inhalt der includierten Datei ein Inhalt der "Stammdatei". Aus diesem Grund verstehe ich das Wort "Zugriffe" nicht.
Falls das hier ein Hilfesuchender mal lesen sollte... Was Hofei meint sind die & am Ende der Zeilen, die die jeweiligen Programme in den Hintergrund schicken. Die doppelten && nach dem sleep x sind Operatoren.
Könntest Du das bitte genauer beschreiben?
Hi,
ja klar kann ich das beschreiben.
Beziehe mich in meinen Scripten auf PHP- Dateien, die ich include.
Daher muss zuerst in das passende Verzeichnis gewechselt werden.
Im Klartext heißt das, ich rufe über den @reboot Cronjob ein Script auf, dass init.php heißt.
Entscheidend war hier dann, das wechseln in das richtige Verzeichnis mittels "cd". Ansonsten werden
die Skripte wegen fehlender Abhängigkeiten nicht ausgeführt.
<?php
/* server/init.php
*
*
* INITIALISIERUNG
*/
set_time_limit (0);
//Warten bis DB sicher geladen
sleep (25);
//Variablen initialisieren
shell_exec('cd /var/www/mycode/server/; php var_init.php');
//GPIO Server starten
shell_exec('cd /var/www/mycode/server/; php gpio_server.php > /dev/null 2>&1 &');
//Websocket Server starten
shell_exec('cd /var/www/mycode/server/; php websocket_server.php > /dev/null 2>&1 &');
//Datenserver starten
shell_exec('cd /var/www/mycode/server/; php get_data_server.php > /dev/null 2>&1 &');
//Jalousien Server starten
shell_exec('cd /var/www/mycode/server/; php jalousien_server.php > /dev/null 2>&1 &');
?>
Alles anzeigen
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!