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分ごとに実行されないようにタスクタイミング(* * * * *)を編集することを忘れないでください。

関連情報