将`screen` CLI命令启动的子进程的输出写入日志文件?

时间:2016-10-28 17:12:59

标签: linux bash shell logging stdout

我在屏幕中启动了一堆相同的脚本(generate_records.php)。我这样做是为了轻松并行化流程。我想使用&> log_$i(StdOut和StdErr)之类的东西将每个PHP进程的输出写入日志文件。

我的shell脚本很弱,我无法正确使用语法。我一直得到屏幕的输出,这是空的。

例如: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

1 个答案:

答案 0 :(得分:0)

如果您使用screen的唯一原因是并行启动多个流程,则可以完全避免它并使用&start them in the background

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

您也可以使用parallel删除一些代码。