Sox 无法与 Cron 协同工作

Sox 无法与 Cron 协同工作

我正在尝试使用 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,并且,以实现你想要的:

在你的crontabcrontab -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).

您的问题是crons$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.filesome file

相关内容