You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下远程读取日志产生多SSH连接进程的问题求解

解决远程日志同步多SSH进程问题

需求与当前实现

需求:读取远程服务器日志文件的最新更新内容,并追加到本地服务器的文件中。

已编写Shell脚本getMsgpka.sh:

sshpass -p '***' ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log | tee -a /var/opt/data/NOTIFICATION/log/MSGPKA/tester.DBG.log

使用nohup命令运行该脚本:

nohup sh /var/opt/script/getMsgpka.sh &

问题现象

运行后生成了多个SSH会话进程,执行ps -ef | grep msgpka输出如下:

[user1@knoc1 opt]$ ps -ef | grep msgpka
user1    421      1  0 04:35 ?        00:00:00 sshpass -p zzzzzzzzzzz ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1    423    421  0 04:35 pts/110  00:00:00 ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1    576      1  0 Mar09 ?        00:00:00 sshpass -p zzzzzzzzzzz ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1    578    576  0 Mar09 pts/28   00:00:00 ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1   3798      1  0 Mar09 ?        00:00:00 sshpass -p zzzzzzzzzzz ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1   3800   3798  0 Mar09 pts/46   00:00:00 ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1   5468      1  0 Mar09 ?        00:00:00 sshpass -p zzzzzzzzzzz ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1   5470   5468  0 Mar09 pts/59   00:00:00 ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1   7543      1  0 04:45 ?        00:00:00 sshpass -p zzzzzzzzzzz ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1   7547   7543  0 04:45 pts/111  00:00:00 ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log
user1   7686      1  0 06:35 ?        00:00:00 sshpass -p zzzzzzzzzzz ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log

解决方案

1. 清理现有多余进程

先终止所有相关的sshpass和ssh进程:

pkill -f "sshpass -p.*ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log"

2. 修改脚本添加单进程锁

修改getMsgpka.sh,加入文件锁机制,确保同一时间只有一个进程在运行:

#!/bin/bash

# 定义锁文件路径
LOCK_FILE="/var/opt/script/getMsgpka.lock"

# 检查锁文件是否存在,若存在则退出
if [ -f "$LOCK_FILE" ]; then
    echo "脚本已在运行,锁文件 $LOCK_FILE 存在"
    exit 1
fi

# 创建锁文件,脚本退出时自动删除
trap 'rm -f "$LOCK_FILE"; exit' INT TERM EXIT
touch "$LOCK_FILE"

# 执行日志同步命令
sshpass -p '***' ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log | tee -a /var/opt/data/NOTIFICATION/log/MSGPKA/tester.DBG.log

3. 正确启动脚本

给脚本添加执行权限:

chmod +x /var/opt/script/getMsgpka.sh

然后用nohup启动,同时记录运行日志:

nohup /var/opt/script/getMsgpka.sh > /var/opt/script/getMsgpka.log 2>&1 &

额外优化建议

  • 避免在脚本中明文写密码,改用SSH密钥认证更安全,且无需依赖sshpass:
    1. 在本地生成SSH密钥:ssh-keygen -t rsa(一路回车使用默认配置)
    2. 将公钥复制到远程服务器:ssh-copy-id msgpka@10.9.7.66
    3. 修改脚本中的命令为:ssh msgpka@10.9.7.66 tail -f /home/DBG/logs/tester.DBG.log | tee -a /var/opt/data/NOTIFICATION/log/MSGPKA/tester.DBG.log

内容的提问来源于stack exchange,提问作者stacktesting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 19:00:38