将错误日志记录放在脚本中而不是在cronjob本身中,是否存在错误输出的差异?

时间:2016-02-17 18:20:45

标签: bash cron crontab cron-task

我试图弄清楚为什么脚本使用./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的结束

1 个答案:

答案 0 :(得分:1)

正如评论中所述,您已经使用exec重定向了所有输出,因此cron无需记录任何内容。假设权限合理,您应该会在omx_log_from_runmusic中看到您的登录信息。您可能希望指定日志文件的显式路径,并确保运行cron的用户有权写入该文件。

无需创建子shell来运行date然后回显结果,只需运行命令即可。它将与所有其他输出一起发送到日志。

您通常会set your script to executablechmod +x mymusic),然后直接从cron调用它,而不是调用bash并将脚本名称作为参数传递。也与cron有关,你每分钟都会这样说;你的所有歌曲都不到一分钟?如果没有,您可能需要检查以确保omxplayer在开始新的之前仍未运行。

you should not be parsing the output from ls,因为一旦遇到名称中有空格的文件,您就会遇到问题(另请参阅bash FAQ 50。)您可以使用glob获取将文件列表放入一个数组中,然后从数组中使用RANDOMgrab 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