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

如何在CentOS 6.10 SSH连接断开时自动删除jamaica.sh脚本?

解决SSH连接断开时自动删除脚本的问题

你尝试的方法不可行的原因

你写的判断sshd服务状态的代码存在两个核心问题:

  1. 语法错误:$(service sshd status | grep "running") == false这种写法不符合bash语法,命令替换的结果无法直接和false做等值比较。
  2. 逻辑错误:sshd是服务器的全局SSH守护进程,单个SSH连接断开不会导致sshd停止,所以这个思路从根本上不成立。

可行的实现方法

这里提供两种可靠的方案,根据你的脚本使用场景选择:

方案一:用trap捕获退出信号(推荐)

直接修改jamaica.sh,通过bash的trap命令捕获脚本退出的信号(包括SSH连接断开触发的终止),在退出时自动删除自身:

#!/bin/bash

# 配置退出信号触发的操作:删除当前脚本
trap 'rm -f "$0"' EXIT

# 这里可以添加脚本原本要执行的业务逻辑
# 示例:如果需要保持脚本运行等待连接断开,可以加等待指令
read -p "按任意键或关闭窗口退出..."

当你执行exit命令、关闭SSH窗口,或者脚本自然结束时,都会触发EXIT信号,自动执行删除脚本的操作。

方案二:后台监控SSH会话进程

如果你的脚本需要后台运行,可以通过监控当前SSH会话的父进程来实现:

#!/bin/bash

# 获取当前SSH会话的父shell进程ID
PARENT_PID=$PPID

# 后台启动监控循环
(
    # 每隔1秒检查父进程是否存在
    while kill -0 $PARENT_PID 2>/dev/null; do
        sleep 1
    done
    # 父进程消失(SSH连接断开)则删除脚本
    rm -f "$0"
) &

# 脚本的其他业务逻辑写在这里
# ...

kill -0 $PARENT_PID仅用于检查进程是否存活,不会发送终止信号,当SSH连接断开,父shell进程消失后,循环结束并执行删除操作。

注意事项

  • 用rm -f替代rm -rf,仅删除单个文件时不需要递归参数,降低误删风险。
  • 确保脚本拥有删除自身的权限,通常你创建的脚本默认具备该权限。

内容的提问来源于stack exchange,提问作者Yohrannes Santos Bigoli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:25:18