相同的命令在 shell 中有效,但在 crontab 中无效

相同的命令在 shell 中有效,但在 crontab 中无效

我有一个简单的命令

play -V4 /folder/file.ogg

在命令行上它工作完美

在 crontab 上

* * * * * klaus  play -V4 /folder/file.ogg

它被触发(我可以在系统日志中看到它)但我听不到它。

CRON[4827]: (klaus) CMD (play -V4 /folder/file.ogg)

更新

crontab 给了我以下调试输出

play DBUG alsa: select_format: trying #2
play DBUG alsa: selecting format 2: S16_LE (Signed 16 bit Little Endian)
play INFO formats: can't set sample rate 44100; using 48000

Output File    : 'default' (alsa)
Channels       : 2
Sample Rate    : 48000
Precision      : 16-bit
Duration       : 00:00:02.21 = 105984 samples ~ 165.6 CDDA sectors
Sample Encoding: 16-bit Signed Integer PCM
Endian Type    : little
Reverse Nibbles: no
Reverse Bits   : no

有效的命令行给了我

Output File    : 'default' (pulseaudio)
Channels       : 2
Sample Rate    : 44100
Precision      : 32-bit
Duration       : 00:00:02.40 = 105984 samples = 180.245 CDDA sectors
Sample Encoding: 32-bit Signed Integer PCM
Endian Type    : little
Reverse Nibbles: no
Reverse Bits   : no

所以问题是来自 sox 包的这个 play 命令,它在命令上使用pulseaudio,在 crontab 上使用 alsa ...

the man of sox 没有显示如何指定 DRIVER,有什么提示吗?

答案1

播放器必须缺少初始化 PulseAudio 所需的一个或多个环境变量。最有可能的是 XDG_RUNTIME_DIR。

尝试将整个环境导出到文件 ( (env; echo 'play -V4 /folder/file.ogg') >script.sh) 中并使用 cron 从 cron 运行它sh -a /path/to/script.sh。如果有效,请查看可以删除哪些环境变量。

相关内容