Ich arbeite an einer kleinen Anwendung, um Schulglocken nach einem Zeitplan zu läuten, der von einer Website aktualisiert werden kann. Alles funktioniert gut, außer dass das Skript, das als Cron-Job geplant ist, den Sound nicht wiedergeben wird, wenn das Skript ausgeführt wird. Ich habe dem Skript Output-Piping- und Echo-Befehle hinzugefügt, um zu überprüfen, ob Cron es ausführt, aber der Teil, der den Sound spielt, funktioniert nicht. Das Skript funktioniert wie erwartet, wenn es manuell über CLI ausgeführt wird.Warum spielt mein PHP-Cron-Skript keinen Ton?
Das Skript eine Zeit extrahiert und eine Sounddatei für jede Periode des Tages auf dem Programm, vergleicht dann die an die Sounddatei zugeordnet Zeit mit der aktuellen Zeit - wenn es ein Spiel, es wird
exec("/usr/bin/aplay /var/www/site/".$soundfile);
Cron wird dann geplant dieses Skript jede Minute während des Schultages laufen:
* 8-16 * 1-6,9-12 1-5 root /usr/bin/php -f /var/www/site/scripts/playsound.php > /dev/null
Noch einmal, wenn ich manuell das Skript ausführen, wenn es Ton geplant ist, wird der Ton spielt durch die angeschlossenen Lautsprecher. Wenn ich Testcode habe, der auf dem Bildschirm erscheint oder in eine Datei ausgegeben wird, wird Cron die Ausgabe in die Dateien ausgeben und bestätigen, dass das Skript wie geplant ausgeführt wird. Es wird einfach nicht den Sound-Teil des Skripts wiedergeben.
Ich habe alle meine Berechtigungen überprüft und da alles andere funktioniert, scheinen sie genau zu sein. Ich kann sogar ein einfaches BASH-Skript schreiben, um Cron dazu zu bringen, einen Sound nach einem Zeitplan abzuspielen. Daher scheint das System die richtigen Gruppenmitgliedschaften zu haben, um sowohl auf das Skript als auch auf die Sounddatei zugreifen zu können. Ich habe exec()
für shell_exec()
ausgewechselt, habe versucht, nur die Befehle sowie die absoluten Pfade zu den Befehlen zu verwenden, und der Cron-Auftrag soll als root ausgeführt werden. Ich kann immer noch nicht herausfinden, warum dieses kleine Feature, das leider so kritisch für dieses Programm ist, nicht funktioniert.
Jeder Rat wird sehr geschätzt.
Dies scheint eher wie eine Frage für eine andere SE-Website. Für Ubuntu gibt es hier eine Antwort: http://askubuntu.com/questions/530048/ubuntu-14-04-and-play-songs-from-cron Könnte auf anderen Nix-Aromen vielleicht hilfreich sein. – developerwjk
Versuchen Sie, dies zur exec hinzuzufügen: 'exec ('...>/tmp/cronlog 2> & 1')' und überprüfen Sie die '/ tmp/cronlog' Log-Datei, wenn es einen Fehler gibt. Wenn 'aplay' X benötigt, müssen Sie sicherstellen, dass root Zugriff auf die aktive X-Sitzung hat (siehe' xhost' Befehl). Möglicherweise möchten Sie einen Benutzer mit einer aktiven Sitzung für den Cron-Job verwenden. – fejese
Das könnte helfen: http://StackOverflow.com/a/22744360/1163786 - Ein Tipp: Unterdrücken Sie keine Fehler beim Debuggen von Cronjob-Problemen. Protokollierungsstufe erhöhen –