我有一个bash脚本,用于处理某个目录中的每个文件:
for (( index=0; index<$COUNT; index++ ))
do
srcFile=${INCOMING_FILES[$index]}
${SCRIPT_PATH}/control.pl ${srcFile} >> ${SCRIPT_PATH}/${LOG_FILE} &
wait ${!}
removeIncomingFile ${srcFile}
done
对于少数文件,它可以正常工作,但是当文件数量很大时,它会变得很慢。我想同时使用此脚本来处理分组文件。
示例文件:
server_1_1 | server_2_1 | server_3_1
server_1_2 | server_2_2 | server_3_2
server_1_3 | server_2_3 | server_3_3
脚本应处理与每个服务器并行相关的文件。
第一个实例-server_1 *
第二实例-server_2 *
第三实例-server_3 *
是否可以使用GNU Parallel以及如何实现? 非常感谢您的每种解决方案!
答案 0 :(得分:1)
对于您要说的问题,我无能为力,但我怀疑以下内容将成为一个合理的起点。您将实际代码放在'...'
中,而不是我使用的虚拟操作中:
#!/bin/bash
# Do stuff for server 1
parallel -k 'echo server_1_{} ; date >> log_1_{}' ::: {1..3}
# Do stuff for server 2
parallel -k 'echo server_2_{} ; date >> log_2_{}' ::: {1..3}
# Do stuff for server 3
parallel -k 'echo server_3_{} ; date >> log_3_{}' ::: {1..3}
示例输出
server_1_1
server_1_2
server_1_3
server_2_1
server_2_2
server_2_3
server_3_1
server_3_2
server_3_3
已创建日志文件
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_1_1
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_1_2
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_1_3
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_2_1
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_2_2
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_2_3
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_3_1
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_3_2
-rw-r--r-- 1 mark staff 29 30 Oct 21:04 log_3_3
答案 1 :(得分:1)