気象データ取得システムを構築しています。私がやりたいことの 1 つは、15 分ごとに到着する衛星データをアニメーション化することです。animate
実際、 8 時間分の PNG 画像を AVI ビデオ ファイルに正常に結合するスクリプト (と呼ばれる) を既に考案しています。これは、ターミナルから手動で実行すると問題なく実行されます。
残念ながら、私の(ルートではなく私のユーザーのように)crontabから実行した場合、同じことは言えません。
以下は、私が言及したcronジョブです。
1,16,31,46 * * * * /home/daniella/bin/anim_all > /home/daniella/logs/anim_all.log 2>&1
anim_all
異なるデータ製品ごとに animate を呼び出すだけです。
#!/bin/bash
set -x
cd /home/daniella/data/imager
rm -rf HRIT_MSG3_*.avi
animate HRIT_MSG3_CTT
animate HRIT_MSG3_IR108
animate HRIT_MSG3_VIS006
animate HRIT_MSG3_WV062
そして animate 自体が を呼び出しますffmpeg
。
#!/bin/bash
set -x
cd /home/daniella/data/imager
product=$1
hl="$product.8hl"
declare -i i=0
for file in $(cat $hl); do
link=$(printf "images%02d.png" $i)
ln -sf $file $link
i=$((i+1))
echo $i
done
ffmpeg -sameq -r 15 -i images%02d.png $product.avi
rm -rf images*.png
明確にするために、.8hl ファイルは、過去 8 時間のデータを参照する PNG ファイル パスの単なるリストです。15 分ごとに新しいデータがあるため、これは 32 行のテキスト ファイルです。最後に、これは anim_all.log (crontab で参照) ファイルを調べるときに返されるエラーです。
+ animate HRIT_MSG3_CTT
animate: unable to open X server `' @ animate.c/AnimateImageCommand/365.
+ animate HRIT_MSG3_IR108
animate: unable to open X server `' @ animate.c/AnimateImageCommand/365.
+ animate HRIT_MSG3_VIS006
animate: unable to open X server `' @ animate.c/AnimateImageCommand/365.
+ animate HRIT_MSG3_WV062
animate: unable to open X server `' @ animate.c/AnimateImageCommand/365.
anim_all
端末から手動で呼び出すと、正常に動作することに注意してください。このエラーは、cron によって呼び出された場合にのみ発生します。これは環境変数に関係していると思いますが.bashrc
、スクリプトの内部をソースにしていません。
編集 -animate.c
ファイル自体の調査 (ここで完全なコードを参照) の 365 ~ 368 行目に、次の内容があります。
if (display == (Display *) NULL)
ThrowAnimateException(XServerError,"UnableToOpenXServer",
XDisplayName(server_name));
(void) XSetErrorHandler(XError);
$DISPLAY
それに応じて、スクリプトで変数を 127.0.0.0:0 にエクスポートしようとしましたanimate
が、うまくいきませんでした。