linux centos 脚本批量启动宝塔服务(二)

相比较于《linux centos 脚本批量启动宝塔服务(一)》

改进点说明:

  1. 使用函数start_service统一处理服务启动逻辑,使代码更简洁且易于维护
  2. 增加了服务状态检查:如果服务已在运行,则跳过启动操作
  3. 即使某个服务启动失败,脚本会继续执行后续服务的启动
  4. 增加了计数功能,最后会汇总显示成功和失败的服务数量
  5. 脚本最终的退出码取决于是否有服务启动失败(0 表示全部成功,1 表示有失败
bash 复制代码
#!/bin/bash

# 初始化成功和失败计数器
success_count=0
fail_count=0
total_count=0

# 定义启动服务的函数
start_service() {
    local service_name=$1
    total_count=$((total_count + 1))
    
    echo "------------------------"
    echo "处理 $service_name ..."
    
    # 检查服务是否已在运行
    if systemctl is-active --quiet "$service_name"; then
        echo "$service_name 已在运行中,无需启动"
        success_count=$((success_count + 1))
        return 0
    fi
    
    # 尝试启动服务
    if systemctl start "$service_name"; then
        echo "$service_name 启动成功"
        success_count=$((success_count + 1))
        return 0
    else
        echo "$service_name 启动失败"
        fail_count=$((fail_count + 1))
        return 1
    fi
}

# 按顺序启动各个服务
start_service "nginx"
start_service "redis"
start_service "php-fpm-80"
start_service "mysqld"
start_service "supervisord"

# 显示汇总结果
echo "------------------------"
echo "所有服务处理完成"
echo "总服务数: $total_count"
echo "启动成功: $success_count"
echo "启动失败: $fail_count"

# 根据是否有失败决定最终退出码
if [ $fail_count -eq 0 ]; then
    exit 0
else
    exit 1
fi
    

使用方法:

  1. 将上述代码保存为start_services.sh
  2. 赋予执行权限:chmod +x start_services.sh
  3. 运行脚本:./start_services.sh

备注:

  • 不同系统上的服务名称可能略有不同(例如 PHP 可能是php74-fpm,MySQL 可能是mysqldmariadb),如果启动失败,请检查并修改相应的服务名称
  • 可能需要使用sudo权限运行:sudo ./start_services.sh
  • 需要查找服务名称使用下面的命令,如:
复制代码
  systemctl list-unit-files | grep -i mysql

nginx可能需要特殊处理,使用下面命令

bash 复制代码
    # Nginx特殊处理:直接检查进程是否存在(避开systemd状态检测问题)
    if [ "$service_name" = "nginx" ]; then
        # pgrep -x 精确匹配进程名"nginx",存在则返回0(成功)
        if pgrep -x "nginx" > /dev/null; then
            return 0  # 进程存在,视为运行中
        else
            return 1  # 进程不存在,视为未运行
        fi
    fi
相关推荐
JZC_xiaozhong2 小时前
数据不互通、审批慢?企业多系统智能协同与流程自动化解决方案
运维·自动化·流程管理·流程自动化·数据集成与应用集成·流程监控·流程可视化设计
爱学习的小囧3 小时前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
坚持就完事了3 小时前
Linux中的变量
linux·运维·服务器
hERS EOUS3 小时前
nginx 代理 redis
运维·redis·nginx
handler013 小时前
从源码到二进制:深度拆解 Linux 下 C 程序的编译与链接全流程
linux·c语言·开发语言·c++·笔记·学习
Cat_Rocky3 小时前
利用Packet Tracer网络实验
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志4 小时前
Linux 驱动实战:SR501 人体红外传感器驱动开发与调试全记录
linux·运维·驱动开发
正点原子4 小时前
【正点原子Linux连载】第三章 U-Boot使用 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
Qbw20044 小时前
【Linux】进程地址空间
linux·c++
忍冬行者4 小时前
MongoDB 三节点副本集离线部署运维手册
运维·数据库·mongodb