├── LICENSE ├── README.md └── nezha-agent-cleaner.sh /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | Copyright (c) 2025 everett7623 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | The above copyright notice and this permission notice shall be included in all 10 | copies or substantial portions of the Software. 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 17 | SOFTWARE. 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 哪吒探针Agent彻底清理工具 (Nezha Agent Complete Removal Tool) 2 |  3 |  4 |  5 | 6 |
7 |
8 |
9 |
10 |
269 | 🎉 感谢使用哪吒探针Agent清理工具!
270 | Thank you for using Nezha Agent Cleaner!
271 |
274 | Made with ❤️ by everett7623 275 |
276 | 277 |278 | ⬆️ 回到顶部 (Back to Top) 279 |
280 | -------------------------------------------------------------------------------- /nezha-agent-cleaner.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ============================================================================== 4 | # Nezha Agent Cleanup Tool 5 | # 6 | # Project: https://github.com/your-username/nezha-agent-cleaner 7 | # Author: everett7623 8 | # Version: 1.1 (Security Patch) 9 | # 10 | # Description: A safe utility to completely remove Nezha Agent, systemd 11 | # services, cron jobs, and Docker containers. 12 | # 13 | # Safety Note: Fixed critical bug in v1.0 that caused accidental deletion 14 | # of other agents (1Panel, Tailscale, etc). Step 7 is now safe. 15 | # ============================================================================== 16 | 17 | # 设置颜色 18 | RED='\033[0;31m' 19 | GREEN='\033[0;32m' 20 | YELLOW='\033[0;33m' 21 | BLUE='\033[0;34m' 22 | NC='\033[0m' # No Color 23 | 24 | # 打印运行时的欢迎横幅 25 | echo -e "${BLUE}=================================================================${NC}" 26 | echo -e "${GREEN} 哪吒探针Agent彻底清理脚本 v1.1 (修复版) ${NC}" 27 | echo -e "${GREEN} Nezha Agent Complete Removal Tool (Fixed) ${NC}" 28 | echo -e "${BLUE}=================================================================${NC}" 29 | 30 | # 检查是否为root用户 31 | if [ "$(id -u)" != "0" ]; then 32 | echo -e "${RED}[错误] 此脚本必须以root权限运行!${NC}" 33 | echo -e "${RED}[Error] This script must be run as root!${NC}" 34 | exit 1 35 | fi 36 | 37 | echo -e "${YELLOW}[信息] 开始清理哪吒探针Agent...${NC}" 38 | echo -e "${YELLOW}[INFO] Starting Nezha Agent cleanup...${NC}" 39 | 40 | # 步骤1: 检查和显示系统中的nezha进程 41 | echo -e "\n${BLUE}[步骤1] 检查哪吒探针进程...${NC}" 42 | echo -e "${BLUE}[Step1] Checking Nezha Agent processes...${NC}" 43 | ps_result=$(ps aux | grep -E "[n]ezha-agent") 44 | if [ -n "$ps_result" ]; then 45 | echo -e "${YELLOW}发现哪吒探针进程:${NC}" 46 | echo -e "${YELLOW}Found Nezha Agent processes:${NC}" 47 | echo "$ps_result" 48 | else 49 | echo -e "${GREEN}未发现哪吒探针进程${NC}" 50 | echo -e "${GREEN}No Nezha Agent processes found${NC}" 51 | fi 52 | 53 | # 步骤2: 检查定时任务(精确匹配nezha-agent) 54 | echo -e "\n${BLUE}[步骤2] 检查相关定时任务...${NC}" 55 | echo -e "${BLUE}[Step2] Checking related cron jobs...${NC}" 56 | cron_result=$(crontab -l 2>/dev/null | grep -iE "nezha-agent|/nezha/" || echo "No crontab found") 57 | if [ "$cron_result" != "No crontab found" ]; then 58 | echo -e "${YELLOW}发现相关定时任务:${NC}" 59 | echo -e "${YELLOW}Found related cron jobs:${NC}" 60 | echo "$cron_result" 61 | 62 | echo -e "${YELLOW}正在移除相关定时任务...${NC}" 63 | echo -e "${YELLOW}Removing related cron jobs...${NC}" 64 | crontab -l | grep -v -iE "nezha-agent|/nezha/" | crontab - 65 | echo -e "${GREEN}定时任务清理完成${NC}" 66 | echo -e "${GREEN}Cron jobs cleaned${NC}" 67 | else 68 | echo -e "${GREEN}未发现相关定时任务${NC}" 69 | echo -e "${GREEN}No related cron jobs found${NC}" 70 | fi 71 | 72 | # 步骤3: 停止并禁用所有nezha-agent服务(精确匹配) 73 | echo -e "\n${BLUE}[步骤3] 停止并禁用所有哪吒探针服务...${NC}" 74 | echo -e "${BLUE}[Step3] Stopping and disabling all Nezha Agent services...${NC}" 75 | nezha_services=$(systemctl list-units --type=service --all | grep -iE "nezha-agent|nezha\.service" | awk '{print $1}') 76 | if [ -n "$nezha_services" ]; then 77 | echo -e "${YELLOW}发现以下哪吒探针服务:${NC}" 78 | echo -e "${YELLOW}Found the following Nezha Agent services:${NC}" 79 | echo "$nezha_services" 80 | 81 | for service in $nezha_services; do 82 | echo -e "${YELLOW}停止并禁用 $service...${NC}" 83 | echo -e "${YELLOW}Stopping and disabling $service...${NC}" 84 | systemctl stop "$service" 2>/dev/null 85 | systemctl disable "$service" 2>/dev/null 86 | done 87 | echo -e "${GREEN}所有服务已停止并禁用${NC}" 88 | echo -e "${GREEN}All services stopped and disabled${NC}" 89 | else 90 | echo -e "${GREEN}未发现哪吒探针服务${NC}" 91 | echo -e "${GREEN}No Nezha Agent services found${NC}" 92 | fi 93 | 94 | # 步骤4: 杀死所有相关进程 95 | echo -e "\n${BLUE}[步骤4] 强制终止所有哪吒探针进程...${NC}" 96 | echo -e "${BLUE}[Step4] Forcefully terminating all Nezha Agent processes...${NC}" 97 | if pgrep -f "nezha-agent" >/dev/null; then 98 | echo -e "${YELLOW}正在终止进程...${NC}" 99 | echo -e "${YELLOW}Terminating processes...${NC}" 100 | pkill -9 -f "nezha-agent" 101 | sleep 1 102 | echo -e "${GREEN}进程已终止${NC}" 103 | echo -e "${GREEN}Processes terminated${NC}" 104 | else 105 | echo -e "${GREEN}没有需要终止的进程${NC}" 106 | echo -e "${GREEN}No processes to terminate${NC}" 107 | fi 108 | 109 | # 步骤5: 删除所有服务文件(精确匹配) 110 | echo -e "\n${BLUE}[步骤5] 删除所有服务文件...${NC}" 111 | echo -e "${BLUE}[Step5] Removing all service files...${NC}" 112 | service_files=$(find /etc/systemd/system/ -type f \( -name "*nezha-agent*" -o -name "*nezha.service*" \) 2>/dev/null) 113 | if [ -n "$service_files" ]; then 114 | echo -e "${YELLOW}发现以下服务文件:${NC}" 115 | echo -e "${YELLOW}Found the following service files:${NC}" 116 | echo "$service_files" 117 | 118 | echo -e "${YELLOW}删除服务文件...${NC}" 119 | echo -e "${YELLOW}Removing service files...${NC}" 120 | find /etc/systemd/system/ -type f \( -name "*nezha-agent*" -o -name "*nezha.service*" \) -exec rm -f {} \; 2>/dev/null 121 | echo -e "${GREEN}服务文件已删除${NC}" 122 | echo -e "${GREEN}Service files removed${NC}" 123 | else 124 | echo -e "${GREEN}未发现服务文件${NC}" 125 | echo -e "${GREEN}No service files found${NC}" 126 | fi 127 | 128 | # 步骤6: 删除二进制文件和目录 129 | echo -e "\n${BLUE}[步骤6] 删除二进制文件和目录...${NC}" 130 | echo -e "${BLUE}[Step6] Removing binary files and directories...${NC}" 131 | directories=( 132 | "/opt/nezha" 133 | "/opt/nezha-agent" 134 | "/usr/local/nezha" 135 | ) 136 | 137 | binaries=( 138 | "/usr/local/bin/nezha-agent" 139 | "/usr/bin/nezha-agent" 140 | "/usr/sbin/nezha-agent" 141 | "/bin/nezha-agent" 142 | ) 143 | 144 | for dir in "${directories[@]}"; do 145 | if [ -d "$dir" ]; then 146 | echo -e "${YELLOW}删除目录: $dir${NC}" 147 | echo -e "${YELLOW}Removing directory: $dir${NC}" 148 | rm -rf "$dir" 149 | fi 150 | done 151 | 152 | for bin in "${binaries[@]}"; do 153 | if [ -f "$bin" ]; then 154 | echo -e "${YELLOW}删除二进制文件: $bin${NC}" 155 | echo -e "${YELLOW}Removing binary file: $bin${NC}" 156 | rm -f "$bin" 157 | fi 158 | done 159 | 160 | # 步骤7: 查找和删除所有相关文件 161 | echo -e "\n${BLUE}[步骤7] 查找并删除所有相关文件...${NC}" 162 | echo -e "${BLUE}[Step7] Finding and removing all related files...${NC}" 163 | echo -e "${YELLOW}正在搜索系统中的哪吒探针相关文件...${NC}" 164 | echo -e "${YELLOW}Searching for Nezha Agent related files in the system...${NC}" 165 | 166 | # 创建临时文件保存查找结果 167 | temp_file=$(mktemp) 168 | 169 | # ⚠️ 修复:只搜索包含 "nezha" 的文件,去掉了危险的 "*agent*" 170 | # ⚠️ FIX: Only search for "*nezha*", removed the dangerous "*agent*" 171 | find /root /home /tmp /var/tmp /etc /usr/local -name "*nezha*" 2>/dev/null > "$temp_file" 172 | 173 | if [ -s "$temp_file" ]; then 174 | echo -e "${YELLOW}发现以下相关文件:${NC}" 175 | echo -e "${YELLOW}Found the following related files:${NC}" 176 | cat "$temp_file" 177 | 178 | echo -e "${YELLOW}是否删除这些文件? [y/N] ${NC}" 179 | echo -e "${YELLOW}Would you like to delete these files? [y/N] ${NC}" 180 | read -r response 181 | if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then 182 | while IFS= read -r file; do 183 | # 二次确认:确保文件路径里真的含有 nezha,防止意外 184 | if [[ "$file" == *"nezha"* ]]; then 185 | echo -e "${YELLOW}删除: $file${NC}" 186 | echo -e "${YELLOW}Removing: $file${NC}" 187 | rm -rf "$file" 2>/dev/null 188 | fi 189 | done < "$temp_file" 190 | echo -e "${GREEN}文件已删除${NC}" 191 | echo -e "${GREEN}Files removed${NC}" 192 | else 193 | echo -e "${YELLOW}跳过删除文件${NC}" 194 | echo -e "${YELLOW}Skipping file removal${NC}" 195 | fi 196 | else 197 | echo -e "${GREEN}未发现相关文件${NC}" 198 | echo -e "${GREEN}No related files found${NC}" 199 | fi 200 | 201 | # 删除临时文件 202 | rm -f "$temp_file" 203 | 204 | # 步骤8: 重新加载systemd 205 | echo -e "\n${BLUE}[步骤8] 重新加载systemd配置...${NC}" 206 | echo -e "${BLUE}[Step8] Reloading systemd configuration...${NC}" 207 | systemctl daemon-reload 208 | echo -e "${GREEN}systemd配置已重新加载${NC}" 209 | echo -e "${GREEN}systemd configuration reloaded${NC}" 210 | 211 | # 步骤9: 检查Docker容器(精确匹配) 212 | echo -e "\n${BLUE}[步骤9] 检查相关Docker容器...${NC}" 213 | echo -e "${BLUE}[Step9] Checking related Docker containers...${NC}" 214 | if command -v docker &> /dev/null; then 215 | nezha_containers=$(docker ps -a --format "{{.ID}}\t{{.Names}}\t{{.Image}}" | grep -iE "nezha-agent|nezha:" || echo "No containers found") 216 | if [ "$nezha_containers" != "No containers found" ]; then 217 | echo -e "${YELLOW}发现以下相关Docker容器:${NC}" 218 | echo -e "${YELLOW}Found the following related Docker containers:${NC}" 219 | echo "$nezha_containers" 220 | 221 | echo -e "${YELLOW}是否停止并删除这些容器? [y/N] ${NC}" 222 | echo -e "${YELLOW}Would you like to stop and remove these containers? [y/N] ${NC}" 223 | read -r response 224 | if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then 225 | container_ids=$(docker ps -a --format "{{.ID}}\t{{.Names}}\t{{.Image}}" | grep -iE "nezha-agent|nezha:" | awk '{print $1}') 226 | for id in $container_ids; do 227 | echo -e "${YELLOW}停止并删除容器: $id${NC}" 228 | echo -e "${YELLOW}Stopping and removing container: $id${NC}" 229 | docker stop "$id" 2>/dev/null 230 | docker rm "$id" 2>/dev/null 231 | done 232 | echo -e "${GREEN}容器已清理${NC}" 233 | echo -e "${GREEN}Containers cleaned${NC}" 234 | else 235 | echo -e "${YELLOW}跳过容器清理${NC}" 236 | echo -e "${YELLOW}Skipping container cleanup${NC}" 237 | fi 238 | else 239 | echo -e "${GREEN}未发现相关Docker容器${NC}" 240 | echo -e "${GREEN}No related Docker containers found${NC}" 241 | fi 242 | else 243 | echo -e "${YELLOW}Docker未安装,跳过检查${NC}" 244 | echo -e "${YELLOW}Docker not installed, skipping check${NC}" 245 | fi 246 | 247 | # 步骤10: 最终检查 248 | echo -e "\n${BLUE}[步骤10] 最终检查...${NC}" 249 | echo -e "${BLUE}[Step10] Final check...${NC}" 250 | 251 | # 检查是否还有任何nezha进程 252 | if pgrep -f "nezha-agent" >/dev/null; then 253 | echo -e "${RED}警告: 仍然检测到哪吒探针进程!${NC}" 254 | echo -e "${RED}Warning: Nezha Agent processes still detected!${NC}" 255 | ps aux | grep -E "[n]ezha-agent" 256 | else 257 | echo -e "${GREEN}✓ 未检测到任何哪吒探针进程${NC}" 258 | echo -e "${GREEN}✓ No Nezha Agent processes detected${NC}" 259 | fi 260 | 261 | # 检查是否还有任何服务 262 | nezha_services_remaining=$(systemctl list-units --type=service --all | grep -iE "nezha-agent|nezha\.service" | awk '{print $1}') 263 | if [ -n "$nezha_services_remaining" ]; then 264 | echo -e "${RED}警告: 仍然检测到哪吒探针服务!${NC}" 265 | echo -e "${RED}Warning: Nezha Agent services still detected!${NC}" 266 | echo "$nezha_services_remaining" 267 | else 268 | echo -e "${GREEN}✓ 未检测到任何哪吒探针服务${NC}" 269 | echo -e "${GREEN}✓ No Nezha Agent services detected${NC}" 270 | fi 271 | 272 | echo -e "\n${BLUE}=================================================================${NC}" 273 | echo -e "${GREEN} 哪吒探针Agent清理完成! ${NC}" 274 | echo -e "${GREEN} Nezha Agent cleanup complete! ${NC}" 275 | echo -e "${BLUE}=================================================================${NC}" 276 | echo -e "${YELLOW}如果您在清理后仍然遇到问题,可能需要考虑系统重启或进一步的检查。${NC}" 277 | echo -e "${YELLOW}If you still encounter issues after cleanup, consider restarting your system or performing further checks.${NC}" 278 | echo -e "\n${GREEN}感谢使用此脚本!${NC}" 279 | echo -e "${GREEN}Thank you for using this script!${NC}" 280 | 281 | exit 0 282 | --------------------------------------------------------------------------------