我正在研究一个小型应用程序,以按计划响铃,可以从网站更新。一切工作都很好,除非脚本运行时按计划的cron作业脚本不能播放声音。我已将输出管道和回显命令添加到脚本以验证cron正在运行它,但播放声音的部分不起作用。从CLI手动运行时,该脚本按预期工作。为什么我的PHP cron脚本不能播放声音?
脚本提取时间和日程的每一天的周期声音文件,然后比较与当前时刻相关联的声音文件的时间 - 如果它是一个比赛,它会
exec("/usr/bin/aplay /var/www/site/".$soundfile);
然后
cron是定于在校期间运行此脚本每分钟:
* 8-16 * 1-6,9-12 1-5 root /usr/bin/php -f /var/www/site/scripts/playsound.php > /dev/null
再次,如果我手动运行该脚本时有声定,声音播放通过连接的扬声器。当我有测试代码回显到屏幕或输出到输入的文件时,cron会将输出转储到文件中,确认它正在按计划运行脚本。它只是不会播放脚本的darn声音部分。
我检查了我的所有权限,因为其他所有的工作都是正确的。我甚至可以编写一个简单的BASH脚本来让Cron按计划播放声音,所以看起来系统具有正确的组成员身份以访问脚本和声音文件。我已将exec()
换为shell_exec()
,尝试使用命令以及命令的绝对路径,并且cron作业被安排为以root用户身份运行。仍然无法弄清楚为什么这个不幸对这个程序成功至关重要的小功能将无法工作。
任何意见非常感谢。
这似乎更像是一个不同的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问题时抑制错误。提高日志记录级别。 –