ビデオを再生するためのテストスクリプトを設定しました。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分ごとに実行されないようにタスクタイミング(* * * * *)を編集することを忘れないでください。