Sto lavorando a una piccola applicazione per suonare campane della scuola su un programma, che può essere aggiornato da un sito web. Tutto funziona alla grande, tranne che lo script programmato come cron job non riprodurrà il suono quando viene eseguito lo script. Ho aggiunto comandi di piping di uscita ed echo allo script per verificare che cron lo stia eseguendo, ma la parte che riproduce il suono non funziona. Lo script funziona come previsto quando viene eseguito manualmente dalla CLI.Perché il mio script cron PHP non suona?
Lo script estrae un tempo e un file audio per ogni periodo della giornata in programma, quindi confronta il tempo associato al file audio con l'ora corrente - se si tratta di un match, lo farà
exec("/usr/bin/aplay /var/www/site/".$soundfile);
Cron è quindi programmato per eseguire questo script ogni minuto durante la giornata scolastica:
* 8-16 * 1-6,9-12 1-5 root /usr/bin/php -f /var/www/site/scripts/playsound.php > /dev/null
Anche in questo caso, se corro manualmente lo script quando c'è suono in programma, l'audio viene riprodotto attraverso gli altoparlanti collegati. Quando avrò un codice di prova che farà eco allo schermo o verrà inviato a un file inserito, cron scaricherà l'output nei file, confermando che sta eseguendo lo script come pianificato. Semplicemente non riprodurrà la parte maledettamente sana della sceneggiatura.
Ho controllato tutti i miei permessi e dato che tutto il resto funziona, sembrano accurati. Posso perfino scrivere un semplice script BASH per far sì che Cron suoni un programma in una programmazione, quindi sembra che il sistema abbia le appartenenze ai gruppi giuste per accedere sia allo script che al file audio. Ho cambiato exec()
per shell_exec()
, ho provato a utilizzare solo i comandi e i percorsi assoluti ai comandi e il processo cron è pianificato per essere eseguito come root. Non riesco ancora a capire perché questa piccola funzionalità che sfortunatamente è così importante per questo programma non funzionerà.
Qualsiasi consiglio è molto apprezzato.
Questo sembra più simile a una domanda per un sito diverso SE. Per Ubuntu c'è una risposta qui: http://askubuntu.com/questions/530048/ubuntu-14-04-and-playing-songs-from-cron Potrebbe essere utile su altri gusti nix forse. – developerwjk
Prova ad aggiungere questo all'esec: 'exec ('...>/tmp/cronlog 2> & 1')' e controlla il file di log '/ tmp/cronlog' se c'è qualche errore. Se 'aplay' ha bisogno di X devi assicurarti che la root abbia accesso alla sessione X attiva (vedi il comando' xhost'). È possibile che si desideri utilizzare un utente con sessione attiva per il processo cron. – fejese
Questo potrebbe aiutare: http://stackoverflow.com/a/22744360/1163786 - Un consiglio: non eliminare gli errori durante il debug dei problemi di cronjob. Aumentare il livello di registrazione. –