根据jar进程和多IP批量移动目录
AI-摘要
KunKunYu GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
根据jar进程和多IP批量移动目录shell脚本
一 需求
多个目录
/data/test1
/data/test2
批量执行多个IP地址
java运行进程名称和目录名称一致
/data/test1/test1.jar
jps查看为:test1.jar
二 依赖文件
IP地址文件
cat servers.txt
192.168.1.1
192.168.1.2
三 脚本一 手动指定ip地址和目录
目录文件
cat java.txt
/data/test1
/data/test2
cat test.sh
#!/bin/bash
# 服务器列表文件
SERVER_LIST="servers.ip"
# java.txt 文件路径
JAVA_TXT_PATH="java.txt"
# 目标目录
TARGET_DIR="/opt/soft/"
# 读取 java.txt 文件中的内容,并为每行(每个路径)执行 mv 命令
while IFS= read -r line; do
cat "$SERVER_LIST" | xargs -I {} -P 5 ssh -p 52222 -l admin {} "sudo mv $line $TARGET_DIR"
done < "$JAVA_TXT_PATH"
四 脚本二 手动指定ip地址和根据java运行进程保留目录
cat test2.sh
#!/bin/bash
# 服务器列表文件
SERVER_LIST="servers.txt"
# java.txt 文件路径
JAVA_TXT_PATH="java"
# 目标目录
TARGET_DIR="/opt/soft/"
# 读取 java.txt 文件中的内容,并为每行(每个路径)执行操作
while IFS= read -r dir; do
# 获取目录的基本名称(不含路径)
dir_base_name=$(basename "$dir")
# 读取服务器列表,并为每个服务器执行操作
while IFS= read -r server; do
# 使用 SSH 连接到服务器并执行 jps 命令,检查 Java 进程
jps_output=$(ssh -p 52222 -l admin "$server" 'jps -l')
# 检查输出中是否包含当前目录的基本名称,忽略.jar扩展名
for process in $(echo "$jps_output" | grep '\.jar$' | awk -F ' ' '{print $2}'); do
if [[ "$process" == "$dir_base_name" ]]; then
echo "保留 $server 上的 $dir 目录,因为存在同名 Java 进程。"
break # 找到匹配的进程,跳出循环
fi
done
# 如果上面的循环没有找到匹配的进程,则移动目录
if [ "${process}" != "$dir_base_name" ]; then
echo "移动 $server 上的 $dir 目录到 $TARGET_DIR。"
ssh -p 52222 -l admin "$server" "mv $dir $TARGET_DIR"
fi
done < "$SERVER_LIST"
done < "$JAVA_TXT_PATH"
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
作者编辑不易,如有转载请注明出处。完整转载来自https://wangairui.com 网站名称:猫扑linux
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果