GNU Parallel --joblog は、for ループ内のコマンドの最初の行だけを記録します。

GNU Parallel --joblog は、for ループ内のコマンドの最初の行だけを記録します。

for私は次のループに沿ってGNU Parallelを使用しています。

for BAND in $(seq 1 "$BANDS") ;do
   # Do not extract, unscale and merge if the scaled map exists already!
   SCALED_MAP="era5_and_land_${VARIABLE}_${YEAR}_band_${BAND}_merged_scaled.nc"
   MERGED_MAP="era5_and_land_${VARIABLE}_${YEAR}_band_${BAND}_merged.nc"
   if [ ! -f "${SCALED_MAP+set}" ] ;then
       echo "log $LOG_FILE Action=Merge, Output=$MERGED_MAP, Pixel size=$OUTPUT_PIXEL_SIZE_X $OUTPUT_PIXEL_SIZE_Y, Timestamp=$(timestamp)"
       echo "gdalmerge_and_clean $VARIABLE $YEAR $BAND $OUTPUT_PIXEL_SIZE_X $OUTPUT_PIXEL_SIZE_Y"
   else
       echo "warning "Scaled map "$SCALED_MAP" exists already! Skipping merging.-""
   fi
done |parallel -j 20 --joblog "parallel.${JOB_CLUSTER_PROCESS}.log"
log "$LOG_FILE" "Action=Merge, End=$(timestamp)"

(記録用:${JOB_CLUSTER_PROCESS}"HTCondorで変数を提供した場合)

ログには次の項目のみが表示されます。最初注文する

echo "log $LOG_FILE Action=Merge, Output=$MERGED_MAP, Pixel >size=$OUTPUT_PIXEL_SIZE_X $OUTPUT_PIXEL_SIZE_Y, Timestamp=$(timestamp)"

これは実際には、このループ中にアクションを記録するカスタムメソッドです。

# tell what you are doing
function log {
    echo "${@: 2}" 2>&1 >> "$1" ;
}
export -f log

2行目を取得できますか?

echo "gdalmerge_and_clean $VARIABLE $YEAR $BAND $OUTPUT_PIXEL_SIZE_X >$OUTPUT_PIXEL_SIZE_Y"

--joblogによって生成された.logファイルには、最初のエントリのみが含まれるか、一緒に含まれます。

ベストアンサー1

--joblogジョブが完了した場合にのみジョブログに追加されます。

GNU Parallelには2つのタスクがあります。

log ...
gdalmerge_and_clean ...

logすばやく完了し、ジョブログに追加されますが、gdalmerge_and_clean実行に時間がかかることがあります。

私の考えでは、タスクを関数として書き換えて呼び出すことを検討する必要があると思います。

doit() {
   BAND=$1
   # Do not extract, unscale and merge if the scaled map exists already!
   SCALED_MAP="era5_and_land_${VARIABLE}_${YEAR}_band_${BAND}_merged_scaled.nc"
   MERGED_MAP="era5_and_land_${VARIABLE}_${YEAR}_band_${BAND}_merged.nc"
   if [ ! -f "${SCALED_MAP+set}" ] ;then
       log $LOG_FILE Action=Merge, Output=$MERGED_MAP, Pixel size=$OUTPUT_PIXEL_SIZE_X $OUTPUT_PIXEL_SIZE_Y, Timestamp=$(timestamp)
       gdalmerge_and_clean $VARIABLE $YEAR $BAND $OUTPUT_PIXEL_SIZE_X $OUTPUT_PIXEL_SIZE_Y
   else
       warning "Scaled map "$SCALED_MAP" exists already! Skipping merging.-"
   fi
}
export -f doit

seq 1 "$BANDS" |
  parallel -j 20 --joblog "parallel.${JOB_CLUSTER_PROCESS}.log" doit {}
log "$LOG_FILE" "Action=Merge, End=$(timestamp)"

--dry-runGNU Parallelが予期しない操作を実行した場合は、試してみることをお勧めします。どのコマンドを実行したいかを教えてくれます。

GNU Parallel 2018(https://www.lulu.com/shop/ole-tange/gnu-parallel-2018/paperback/product-23558902.htmlまたはダウンロード:https://doi.org/10.5281/zenodo.1146014)

20分もかからず、コマンドラインが好きです。

おすすめ記事