#!/bin/bash # 定义远程节点列表 nodes=("node02" "node01" "node03") # 定义本地和远程目录 local_dir="$HOME/yuzhou/jiangcang_vj/" remote_dir="~/yuzhou/jiangcang_vj" echo "=== 清理本地日志文件 ===" rm -f "$local_dir/output.log" "$local_dir/nohup.out" echo "=== 远端目录初始化 ===" for node in "${nodes[@]}"; do echo "初始化 $node 的目录结构..." ssh "$node@$node" " set -e mkdir -p \ $remote_dir \ $remote_dir/data_shards \ $remote_dir/photo " echo "✅ $node 目录就绪" done echo "=== 开始同步文件到远程节点 ===" # 遍历远程节点并同步文件 for node in "${nodes[@]}"; do echo "正在同步到 $node..." # 只同步当前目录文件, 不同步任何子目录 rsync -avz \ --files-from=<(find "$local_dir" -maxdepth 1 -type f -printf "%f\n") \ "$local_dir" "$node@$node:$remote_dir/" if [ $? -ne 0 ]; then echo "⚠️ 警告: 同步到 $node 失败,跳过该节点。" continue # 继续同步下一个节点 fi echo "✅ 同步到 $node 完成。" done echo -e "\n\n" echo "=== 开始在远程节点上执行对应的 start_nodeXX.sh ===" # nohup setsid ./$script_name > ~/yuzhou/jiangcang_vj/nohup_$node.log 2>&1 & # 在远程节点执行 `start_nodeXX.sh` for node in "${nodes[@]}"; do script_name="start_${node}.sh" echo "正在执行 $node 上的 $script_name..." # 修改后的执行命令,捕获所有输出信息 ssh "$node@$node" " cd $remote_dir && chmod +x $script_name; ./$script_name " if [ $? -ne 0 ]; then echo "⚠️ 警告: 在 $node 上执行 $script_name 失败,跳过该节点。" continue # 继续执行下一个节点 fi echo "✅ 在 $node 上成功执行 $script_name。" done echo -e "\n\n" echo "=== 在本地执行 start_node04.sh ===" # 在本地执行 `start_node04.sh` cd "$local_dir" chmod +x start_node04.sh && ./start_node04.sh if [ $? -ne 0 ]; then echo "❌ 错误: 本地执行 start_node04.sh 失败,请检查问题!" exit 1 fi echo "🎉 所有任务执行完毕!" echo -e "\n\n"