我有一个处理将数据文件导入数据库的 bash 脚本,由于数据量很大,我想将文件(27 个)分发到我的 4 个节点集群并在每台机器上本地执行 shell 脚本,而不涉及引导程序(脚本将在每台机器上独立地将数据加载到数据库中)。
我将加载脚本复制到每个节点,并将多个文件复制到同一个文件夹,因此在本地运行会一个一个加载它们。但我需要从引导程序触发它。
我的工人姓名是:WORKER1
...WORKER4
我尝试使用:
processloadingFiles() {
for FILE in `ls -1 data_migration_part*`
do
echo "Copying file $FILE to WORKER$WORKER"
scp $FILE $ENV_IP$WORKER:$DIR_BIN/data_migration.csv
echo "Processing file $FILE" "" $WORKER
ssh $ENV_IP$WORKER "cd /home/datausr/files/Migration; ./loadfiles.sh " &
((WORKER++))
if [ $WORKER -eq 5 ]; then
wait
WORKER=1
fi
done
}
运行上面的代码将开始在节点上加载,但它将逐个节点而不是独立地加载它。
结果将是:
[datausr@bootstrap Migration]$ ps -ef | grep migrate
datausr 91290 90149 0 09:16 pts/0 00:00:00 ssh 20.18.8.21 cd /home/datausr/VivoHistoryMigration;source ./loadfiles.sh
datausr 91306 90149 0 09:16 pts/0 00:00:00 ssh 20.18.8.22 cd /home/datausr/VivoHistoryMigration;source ./loadfiles.sh
datausr 91335 90149 0 09:16 pts/0 00:00:00 ssh 20.18.8.23 cd /home/datausr/files/Migration ;source ./loadfiles.sh
datausr 91356 61457 0 09:16 pts/0 00:00:00 grep --color=auto migrate
[datausr@bootstrap Migration]$
这些进程在引导程序中运行,并且在最后一个完成之前不会启动新的加载作业。
如何执行本地脚本,让它在远程节点上运行,这样它就可以在不涉及引导程序的情况下自行完成?