비디오를 재생하기 위한 테스트 스크립트를 설정했습니다.VLC-3.0.12
(만자로)사용crontab
(크로니-1.5.7). 문제의 파일은 다음과 같습니다.
#!/bin/bash
## YES, I'M RICKROLLING MYSELF FOR TESTING
[[ "$HOME" != "/home/drjeff16" ]] && exit 1
[[ -n "$(pgrep vlc)" ]] && exit 1
# SINCE CRON DOES NOT SET THE EXISTING X11 ENV VARS, SET THE DISPLAY MANUALLY
DISPLAY=:0.0
if [[ "$isCron" == "0" ]] ; then # IF RUNNING FROM REGULAR TERMINAL ENVIRONMENT
echo '[[ -n "$(pgrep vlc)" ]] && killall vlc' | /usr/bin/at now + 5 minutes
nhp vlc "$HOME"/Videos/Music/Never-Gonna-Give-You-Up.mp4 # 'nhp' IS 'nohup <command> &!' AS AN EXPORTED
# FUNCTION TO AVOID APPS HIJACKING MY TERMINAL
exit 0
elif [[ "$isCron" == "1" ]] ; then # ELSE IF RUNNING FROM CRONTAB ($isCron IS 1 ON CRON ENV)
echo '[[ -n "$(pgrep vlc)" ]] && killall vlc' | /usr/bin/at now + 5 minutes
vlc "$HOME"/Videos/Music/Never-Gonna-Give-You-Up.mp4
exit 0
fi
exit 1
일반 환경에서 이 스크립트를 실행하면 문제가 발생하지 않습니다. crontab
그러나 다음에서 실행할 때VLC는 비디오를 실행하고 표시하지만 어디에도 오디오 출력이 없습니다..
VLC의 수동 항목을 읽는 동안 man vlc
다음 섹션에서 이 변수를 발견했습니다.$OSSAUDIO_DEV
ENVIRONMENT VARIABLES
.
.
OSSAUDIO_DEV
The default audio output device, used by the OSSv4 output plugin.
.
.
$OSSAUDIO_DEV
내 질문은 내 환경에서 변수를 수동으로 설정해야 하는지, 아니면 내 변수 crontab
와 관련된 다른 변수 가 있는지, ALSA
Pulseaudio
dbus
아니면 내 환경에서 또는 내 세션을 사용하여 수동으로 선언해야 하는지입니다.예약 된 일들문서:
# * * * * * Command_to_execute
# | | | | |
# | | | | Day of the Week ( 0 - 6 ) ( Sunday = 0 )
# | | | |
# | | | Month ( 1 - 12 )
# | | |
# | | Day of Month ( 1 - 31 )
# | |
# | Hour ( 0 - 23 )
# |
# Min ( 0 - 59 )
SHELL=/bin/bash
HOME=/home/drjeff16
DISPLAY=:0.0
.
.
.
EDITOR="$(cat $HOME/.editor)"
isCron=1
.
.
.
답변1
내 상용구 cron
답변은 다음과 같습니다. 도움이 되기를 바랍니다.
cron
작업은 , 또는 을 통해 at
실행되거나 batch
데스크탑의 동일한 런타임 환경에서 실행되지 않습니다. 변경 사항이나 기타 환경 변수 설정은 작업 PATH
에 자동으로 전파되지 않습니다 cron
. 예를 들어 no $DISPLAY
이므로 GUI 프로그램에는 특별한 처리(읽기 man xhost
)가 필요합니다.
cron
환경 변수는 모든 작업에 대한 읽기 파일에서 설정할 수 있습니다 .crontab
man 5 crontab
echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
각 환경의 결과를 확인하세요.
해당 줄의 부분은 기본적으로 해석되고 command
그 구문은 그보다 간단하므로 스크립트(실행 가능, 설치, 7로 시작)를 호출하여 환경을 설정한 후 필요한 프로그램을 호출하는 것이 좋습니다.crontab
/bin/sh
/bin/bash
command
bash
#!/bin/bash
답변2
XDG를 정의해 볼 수 있습니다. 예를 들어:
* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) /path/to/script
소리가 나에게 효과가 있기 시작했습니다. 1분마다 실행되지 않도록 작업 타이밍(* * * * *)을 편집하는 것을 잊지 마세요.