私はスケジュールに従って学校の鐘を鳴らすための小さなアプリケーションに取り組んでいます。これはウェブサイトから更新することができます。スクリプトが実行されたときにcronジョブがサウンドを再生しないようにスケジュールされているスクリプトを除いて、すべてがうまくいっています。スクリプトに出力配管とエコーコマンドを追加して、cronが実行していることを確認しましたが、サウンドを再生する部分は機能しません。このスクリプトは、CLIから手動で実行したときに正常に動作します。私のPHP cronスクリプトがサウンドを再生しないのはなぜですか?
スクリプトは、時間とスケジュールで一日の各期間の音声ファイルを抽出し、その後、現在の時刻と音声ファイルに関連付けられた時間を比較する - それは試合だ場合、それは
exec("/usr/bin/aplay /var/www/site/".$soundfile);
ます
クロンは、その後の学校の日中の毎分このスクリプトを実行するようにスケジュールされています。そこには音予定されているとき、私は手動でスクリプトを実行した場合
* 8-16 * 1-6,9-12 1-5 root /usr/bin/php -f /var/www/site/scripts/playsound.php > /dev/null
ここでも、音は添付のスピーカーから再生されます。テストコードが画面に表示されたり、入力されたファイルに出力されたりすると、cronは出力をファイルにダンプし、スクリプトがスケジュール通りに実行されていることを確認します。それはちょうどスクリプトの厄介な音の部分を再生しません。
私のすべてのアクセス許可を確認しましたが、それ以外はうまく動作しているため、正確であるようです。私はスケジュールで音を出すためにシンプルなBASHスクリプトを書くことさえできるので、スクリプトとサウンドファイルの両方にアクセスするための正しいグループメンバーシップがシステムにあるようです。私はshell_exec()
のexec()
を交換しました。コマンドだけでなく、コマンドへの絶対パスを使ってみました。そして、cronジョブはrootとして実行するようにスケジュールされています。残念ながらこのプログラムの成功に不可欠なこの小さな機能がうまくいかない理由はまだ分かりません。
アドバイスをいただければ幸いです。意図したPHPファイルを呼び出すために - その代わりにcronとして設定するので
これは、複数の異なるSEサイトの質問のように思えます。 Ubuntuについては、ここに答えがあります:http://askubuntu.com/questions/530048/ubuntu-14-04-and-playing-songs-from-cron多分、他のnixフレーバーに役立つかもしれません。 – developerwjk
これをexec: 'exec( '...>/tmp/cronlog 2>&1')'に追加し、エラーがあれば '/ tmp/cronlog'ログファイルをチェックしてください。 'aplay'にXが必要な場合、rootがアクティブなXセッションにアクセスできるようにする必要があります(' xhost'コマンド参照)。 cronジョブに対してアクティブなセッションを持つユーザーを使用することができます。 – fejese
これは役立つかもしれません:http://stackoverflow.com/a/22744360/1163786 - 助言:cronjobの問題をデバッグ中にエラーを抑制しないでください。ロギングレベルを上げます。 –