我试图弄清楚为什么脚本使用./runmusic
运行但未从cronjob启动。将错误报告放在何处以及为何是最好的地方?
我的剧本
pi@raspberrypi ~/Music $ cat runmusic
#!/bin/bash
exec >>omx_log_from_runmusic 2>&1
echo $(date)
DISPLAY=:0
var=$(\ls songs/|shuf -n 1)
#omxplayer -o local /home/pi/Music/Bloodletting.mp3
omxplayer -o local "/home/pi/Music/songs/$var"
$ crontab -l </ p>
* * * * * bash /home/pi/Music/runmusic > /tmp/setvals
我现在没有收到这些文件中的任何一个的错误报告,尽管我从脚本中的日志记录中获得了预期的文本输出。例如“祝你有个美好的一天:)”作为omxplayer的结束
答案 0 :(得分:1)
正如评论中所述,您已经使用exec
重定向了所有输出,因此cron
无需记录任何内容。假设权限合理,您应该会在omx_log_from_runmusic
中看到您的登录信息。您可能希望指定日志文件的显式路径,并确保运行cron
的用户有权写入该文件。
无需创建子shell来运行date
然后回显结果,只需运行命令即可。它将与所有其他输出一起发送到日志。
您通常会set your script to executable(chmod +x mymusic
),然后直接从cron
调用它,而不是调用bash
并将脚本名称作为参数传递。也与cron有关,你每分钟都会这样说;你的所有歌曲都不到一分钟?如果没有,您可能需要检查以确保omxplayer
在开始新的之前仍未运行。
并you should not be parsing the output from ls
,因为一旦遇到名称中有空格的文件,您就会遇到问题(另请参阅bash FAQ 50。)您可以使用glob获取将文件列表放入一个数组中,然后从数组中使用RANDOM
到grab an element。
#!/bin/bash
exec >> /full/path/to/omx_log_from_runmusic 2>&1
date
DISPLAY=:0
if pgrep omxplayer
then
exit
else
files=(/home/pi/Music/songs/*)
n=${#files[@]}
omxplayer -o local "${files[RANDOM % n]}"
fi