2017-08-03 3 views
1

GNU並列を使用するプログラムの複数のインスタンスを実行しており、それぞれに2次メモリのスペースが必要です。現在のセットアップでは、後でデバイスに残っているスペースがないため、すべてのインスタンスがエラーで終了します。GNU Parallelを使用して次のジョブを実行する(ユーザ定義条件がtrueの場合のみ)

デバイスの使用率が90%未満の場合にのみ、次のジョブを実行するようにGNU Parallelを設定するにはどうすればよいですか?私はdfコマンドを使用して、デバイスの使用状況を取得することができます:df --output=pcent "$PWD" | sed '1d;s/[^0-9]//g'

答えて

2

あなたはこのような関数を使用することができます。

#!/bin/bash 

# define a function which "parallel" will call 
doit() { 
    # wait forever for sufficient resources 
    while :; do 
     pcnt=$(df --output ...) 
     [ $pcnt -lt 90 ] && break 
     sleep 5 
    done 
    # do job now as resources are available 

} 

# export function to subshells started by "parallel" 
export -f doit 

# start "parallel" - probably one of 3 methods: 
# parallel -a jobs.txt doit 
# parallel doit ::: jobs 
# generate_jobs | parallel doit 
関連する問題