服务管理脚本#
脚本说明#
服务管理脚本用于批量管理系统服务,包括启动、停止、重启、状态检查等操作。
脚本代码#
#!/bin/bash
# 服务管理脚本
# 功能:批量管理系统服务
# 作者:System Admin
# 日期:2024-01-01
set -euo pipefail
# 配置变量
LOG_FILE="/var/log/service_manager.log"
SERVICES_FILE=""
ACTION="status"
PARALLEL=false
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 日志函数
log() {
local level=$1
shift
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] [$level] $@" | tee -a "$LOG_FILE"
}
log_info() {
log "INFO" "$@"
}
log_error() {
log "ERROR" "$@"
}
# 检查systemctl
check_systemctl() {
if ! command -v systemctl &> /dev/null; then
log_error "systemctl未安装"
return 1
fi
return 0
}
# 列出所有服务
list_services() {
log_info "列出所有服务"
systemctl list-units --type=service --all
}
# 列出运行中的服务
list_running_services() {
log_info "列出运行中的服务"
systemctl list-units --type=service --state=running
}
# 检查服务状态
check_service_status() {
local service=$1
log_info "检查服务状态: $service"
local status=$(systemctl is-active "$service")
local enabled=$(systemctl is-enabled "$service")
echo "服务: $service"
echo "状态: $status"
echo "开机启动: $enabled"
if [ "$status" = "active" ]; then
return 0
else
return 1
fi
}
# 启动服务
start_service() {
local service=$1
log_info "启动服务: $service"
if systemctl start "$service"; then
log_info "服务启动成功: $service"
return 0
else
log_error "服务启动失败: $service"
return 1
fi
}
# 停止服务
stop_service() {
local service=$1
log_info "停止服务: $service"
if systemctl stop "$service"; then
log_info "服务停止成功: $service"
return 0
else
log_error "服务停止失败: $service"
return 1
fi
}
# 重启服务
restart_service() {
local service=$1
log_info "重启服务: $service"
if systemctl restart "$service"; then
log_info "服务重启成功: $service"
return 0
else
log_error "服务重启失败: $service"
return 1
fi
}
# 重新加载服务
reload_service() {
local service=$1
log_info "重新加载服务: $service"
if systemctl reload "$service"; then
log_info "服务重新加载成功: $service"
return 0
else
log_error "服务重新加载失败: $service"
return 1
fi
}
# 启用服务
enable_service() {
local service=$1
log_info "启用服务: $service"
if systemctl enable "$service"; then
log_info "服务启用成功: $service"
return 0
else
log_error "服务启用失败: $service"
return 1
fi
}
# 禁用服务
disable_service() {
local service=$1
log_info "禁用服务: $service"
if systemctl disable "$service"; then
log_info "服务禁用成功: $service"
return 0
else
log_error "服务禁用失败: $service"
return 1
fi
}
# 批量操作服务
batch_operation() {
local action=$1
local services=($2)
log_info "批量操作: $action"
local success=0
local failed=0
for service in "${services[@]}"; do
case $action in
start)
if start_service "$service"; then
success=$((success + 1))
else
failed=$((failed + 1))
fi
;;
stop)
if stop_service "$service"; then
success=$((success + 1))
else
failed=$((failed + 1))
fi
;;
restart)
if restart_service "$service"; then
success=$((success + 1))
else
failed=$((failed + 1))
fi
;;
status)
if check_service_status "$service"; then
success=$((success + 1))
else
failed=$((failed + 1))
fi
;;
enable)
if enable_service "$service"; then
success=$((success + 1))
else
failed=$((failed + 1))
fi
;;
disable)
if disable_service "$service"; then
success=$((success + 1))
else
failed=$((failed + 1))
fi
;;
esac
done
log_info "批量操作完成: 成功=$success, 失败=$failed"
}
# 显示帮助
show_help() {
echo "用法: $0 [选项] <操作> [服务...]"
echo ""
echo "选项:"
echo " -f <文件> 服务列表文件"
echo " -p 并行执行"
echo " -h 显示帮助信息"
echo ""
echo "操作:"
echo " list 列出所有服务"
echo " running 列出运行中的服务"
echo " status <服务> 检查服务状态"
echo " start <服务> 启动服务"
echo " stop <服务> 停止服务"
echo " restart <服务> 重启服务"
echo " reload <服务> 重新加载服务"
echo " enable <服务> 启用服务"
echo " disable <服务> 禁用服务"
echo ""
echo "示例:"
echo " $0 list"
echo " $0 status nginx"
echo " $0 start nginx mysql"
echo " $0 restart nginx"
echo " $0 -f services.txt restart"
}
# 主函数
main() {
# 解析选项
while getopts "f:ph" opt; do
case $opt in
f)
SERVICES_FILE="$OPTARG"
log_info "服务列表文件: $SERVICES_FILE"
;;
p)
PARALLEL=true
log_info "并行执行"
;;
h)
show_help
exit 0
;;
*)
log_error "无效选项: $opt"
show_help
exit 1
;;
esac
done
shift $((OPTIND - 1))
# 检查systemctl
if ! check_systemctl; then
exit 1
fi
# 检查操作
if [ $# -eq 0 ]; then
log_error "缺少操作"
show_help
exit 1
fi
ACTION=$1
shift
# 执行操作
case $ACTION in
list)
list_services
;;
running)
list_running_services
;;
status|start|stop|restart|reload|enable|disable)
if [ $# -eq 0 ] && [ -z "$SERVICES_FILE" ]; then
log_error "缺少服务参数"
show_help
exit 1
fi
# 获取服务列表
local services=()
if [ -n "$SERVICES_FILE" ]; then
mapfile -t services < "$SERVICES_FILE"
else
services=("$@")
fi
# 执行批量操作
batch_operation "$ACTION" "${services[*]}"
;;
*)
log_error "无效的操作: $ACTION"
show_help
exit 1
;;
esac
}
# 执行主函数
main "$@"使用说明#
添加执行权限:
chmod +x service_manager.sh基本用法:
# 列出所有服务 ./service_manager.sh list # 列出运行中的服务 ./service_manager.sh running # 检查服务状态 ./service_manager.sh status nginx # 启动服务 ./service_manager.sh start nginx # 停止服务 ./service_manager.sh stop nginx # 重启服务 ./service_manager.sh restart nginx批量操作:
# 创建服务列表文件 cat > services.txt <<EOF nginx mysql redis EOF # 批量启动 ./service_manager.sh -f services.txt start # 批量重启 ./service_manager.sh -f services.txt restart
功能特点#
- 服务状态检查
- 服务启动/停止/重启
- 服务启用/禁用
- 批量服务操作
- 服务列表显示
- 详细的操作日志
依赖项#
- systemctl: 用于服务管理
注意事项#
- 需要root权限管理服务
- 批量操作时注意服务依赖关系
- 重启服务可能导致服务中断
- 建议在维护窗口执行批量操作