Crontab 스크립트를 사용하여 소리 없이 VLC 비디오 실행

Crontab 스크립트를 사용하여 소리 없이 VLC 비디오 실행

비디오를 재생하기 위한 테스트 스크립트를 설정했습니다.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_DEVENVIRONMENT VARIABLES

.
.
OSSAUDIO_DEV
              The default audio output device, used by the OSSv4 output plugin.
.
.

$OSSAUDIO_DEV내 질문은 내 환경에서 변수를 수동으로 설정해야 하는지, 아니면 내 변수 crontab와 관련된 다른 변수 가 있는지, ALSAPulseaudiodbus아니면 내 환경에서 또는 내 세션을 사용하여 수동으로 선언해야 하는지입니다.예약 된 일들문서:

# *    *    *   *    *  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환경 변수는 모든 작업에 대한 읽기 파일에서 설정할 수 있습니다 .crontabman 5 crontab

echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias각 환경의 결과를 확인하세요.

해당 줄의 부분은 기본적으로 해석되고 command그 구문은 그보다 간단하므로 스크립트(실행 가능, 설치, 7로 시작)를 호출하여 환경을 설정한 후 필요한 프로그램을 호출하는 것이 좋습니다.crontab/bin/sh/bin/bashcommandbash#!/bin/bash

답변2

XDG를 정의해 볼 수 있습니다. 예를 들어:

* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) /path/to/script

소리가 나에게 효과가 있기 시작했습니다. 1분마다 실행되지 않도록 작업 타이밍(* * * * *)을 편집하는 것을 잊지 마세요.

관련 정보