2016-10-28 2 views
-1

同じスクリプト(generate_records.php)の束を画面に表示しています。私は簡単にプロセスを並列化するためにこれをやっています。 &> log_$i(StdOutとStdErr)のようなものを使用して、各PHPプロセスの出力をログファイルに書きたいと思います。`screen` CLIコマンドによって起動されたサブプロセスの出力をログファイルに書き込みますか?

私のシェルスクリプトは弱いソースです。正しい構文を取得できません。私は空の画面の出力を得続けます。

Exmaple:launch_processes_in_screens.sh

max_record_id=300000000 

# number of parallel processors to run 
total_processors=10 

# max staging companies per processor 
((num_records_per_processor = $max_record_id/$total_processors)) 

i=0 
while [ $i -lt $total_processors ] 
do 
    ((starting_id = $i * $num_records_per_processor + 1)) 
    ((ending_id = $starting_id + $num_records_per_processor - 1)) 
    printf "\n - Starting processor #%s starting at ID:%s and ending at ID: %s" "$i" "$starting_id" "$ending_id" 
    screen -d -m -S "process_$i" php generate_records.php "$starting_id" "$num_records_per_processor" "FALSE" 
    ((i++)) 
done 
+0

なぜ 'screen'を使用していますか?出力をファイルに送るために通常のシェルI/Oリダイレクトを使用するだけではどうですか? ( 'php generate_records.php" $ start_id "" $ num_records_per_processor ""偽 "> log-for- $ start_id.txt 2>&1&') – larsks

+0

私は 'screen'を使って同じスクリプトの束を並行して起動しています。私はあなたのコマンドが正常に動作すると思うが、私は 'screen'コマンドのコンテキストで動作するようにはできません。それは私が思うと苦労している 'screen'コマンドまたはsh構文上の問題です。 –

答えて

0

あなたがscreenを使用している唯一の理由は、並列に多くのプロセスを起動する場合、あなたはそれを完全に回避しstart them in the background&を使用することができます。

php generate_records.php "$starting_id" "$num_records_per_processor" FALSE & 

ますparallelを使用していくつかのコードを削除することもできます。

関連する問題