0

我有一个处理将数据文件导入数据库的 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]$

这些进程在引导程序中运行,并且在最后一个完成之前不会启动新的加载作业。

如何执行本地脚本,让它在远程节点上运行,这样它就可以在不涉及引导程序的情况下自行完成?

4

0 回答 0