1


気象データ取得システムを構築しています。私がやりたいことの 1 つは、15 分ごとに到着する衛星データをアニメーション化することです。animate実際、 8 時間分の PNG 画像を A​​VI ビデオ ファイルに正常に結合するスクリプト (と呼ばれる) を既に考案しています。これは、ターミナルから手動で実行すると問題なく実行されます。

残念ながら、私の(ルートではなく私のユーザーのように)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が、うまくいきませんでした。

4

1 に答える 1

2

animateスクリプトの代わりにImageMagick コマンドを呼び出しています。では、スクリプトanim_allへのフル パスを使用する必要があります。animate

/full/path/to/animate HRIT_MSG3_CTT

これ以上の混乱を避けるために、animate の名前を変更します。

エラーは、何が起こっていたのかを教えてくれます。ImageMagick をanimate使用するには、GUI があるため、X ディスプレイが必要です。さらに、もちろんこのファイルanimate.c/AnimateImageCommand/365を参照しているからエラーが発生していると書かれています。

于 2013-11-04T15:06:34.263 に答える