동일한 명령이 쉘에서는 작동하지만 crontab에서는 작동하지 않습니다.

동일한 명령이 쉘에서는 작동하지만 crontab에서는 작동하지 않습니다.

간단한 명령이 있어요

play -V4 /folder/file.ogg

명령줄에서는 완벽하게 작동합니다.

크론탭에서

* * * * * 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

따라서 문제는 명령에 pulseaudio를 사용하고 crontab에 alsa를 사용하는 sox 패키지의 재생 명령입니다.

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. 작동한다면 어떤 환경 변수를 제거할 수 있는지 확인하세요.

관련 정보