如何在CentOS 6.10 SSH连接断开时自动删除jamaica.sh脚本?
解决SSH连接断开时自动删除脚本的问题
你尝试的方法不可行的原因
你写的判断sshd服务状态的代码存在两个核心问题:
- 语法错误:
$(service sshd status | grep "running") == false这种写法不符合bash语法,命令替换的结果无法直接和false做等值比较。 - 逻辑错误: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
相关产品推荐
相关产品推荐

