我正在尝试使用 Cron 在设定的时间播放 MP3 文件(这或多或少是一个 POC 闹钟)。基本上,我将文件crontab
设置为运行 bash 脚本,如下所示:
* * * * * export DISPLAY=:0 && export XAUTHORITY=/home/username/.Xauthority && home/username/test
这是用于播放音频文件的 bash 文件;我正在使用播放sox
。
#!/bin/bash
PATH=/usr/bin
play /home/username/Media/Music/my_audio.mp3
如果我单独运行该文件,它工作得很好,但使用 时什么都没有发生cron
。有人能给我一些关于我需要修复什么的指点吗?非常感谢!
答案1
cron
不是bash
(而且你的bash
语法也是错误的。请阅读man bash
)。请阅读man 5 crontab
,并且,以实现你想要的:
在你的crontab
(crontab -e
)
DISPLAY=:0
XAUTHORITY=/home/username/.Xauthority
* * * * * /home/username/test
但是!这没有必要!该play
命令既不使用 也不$DISPLAY
使用$XAUTHORITY
。
从man play
:
SoX is a command-line audio processing tool, particularly suited to making quick, simple edits and to batch processing. If
you need an interactive, graphical audio editor, use audacity(1).
您的问题是cron
s$PATH
与您的不一样。将向您展示如何设置它,或者您可以在脚本中 man 5 crontab
使用完整路径:play
#!/bin/bash
# no need to set $PATH
/usr/bin/play $HOME/Media/Music/my_audio.mp3
您可以通过在两者中执行(使用不同的值)来探索cron
的执行环境和 GUI 执行环境之间的差异。(echo "=== set ===";set;echo "===env ==="; env | sort;echo "=== alias ===";alias) >some.file
some file