定时检查系统语言包更新脚本

wen 实用脚本 1

本文目录导读:

定时检查系统语言包更新脚本

  1. 使用说明
  2. 脚本功能特点
  3. 配置参数说明
  4. 安全注意事项
#!/bin/bash
# ==============================
# 定时检查系统语言包更新脚本
# 适用于 Linux 系统 (Ubuntu/Debian, CentOS/RHEL)
# ==============================
# ---------- 配置参数 ----------
LOG_FILE="/var/log/language_package_check.log"   # 日志文件路径
EMAIL_NOTIFY=false                               # 是否发送邮件通知 (true/false)
EMAIL_TO="admin@example.com"                     # 通知邮箱地址
NOTIFY_ONLY_UPDATE=true                          # 仅在有更新时通知 (true/false)
# ------------------------------
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color
# 函数:记录日志
log_message() {
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo -e "[$timestamp] $1" | tee -a "$LOG_FILE"
}
# 函数:发送邮件通知
send_email() {
    local subject="$1"
    local body="$2"
    if [ "$EMAIL_NOTIFY" = true ]; then
        echo -e "$body" | mail -s "$subject" "$EMAIL_TO"
        log_message "${YELLOW}[通知] 邮件已发送至 $EMAIL_TO${NC}"
    fi
}
# 检查是否以 root 权限运行
if [ "$(id -u)" -ne 0 ]; then
    echo -e "${RED}[错误] 请以 root 权限运行此脚本 (使用 sudo)${NC}"
    exit 1
fi
# 检测系统类型
if [ -f /etc/debian_version ]; then
    OS_TYPE="debian"
    PKG_MANAGER="apt"
    UPDATE_CMD="apt update"
    LANG_PACKAGES="language-pack-* language-support-*"
elif [ -f /etc/redhat-release ] || [ -f /etc/centos-release ]; then
    OS_TYPE="redhat"
    PKG_MANAGER="yum"
    if command -v dnf &> /dev/null; then
        PKG_MANAGER="dnf"
    fi
    UPDATE_CMD="$PKG_MANAGER check-update"
    LANG_PACKAGES="*lang* *language* *locale*"
else
    log_message "${RED}[错误] 不支持的系统类型${NC}"
    exit 1
fi
log_message "${GREEN}[信息] 检测到系统类型: $OS_TYPE${NC}"
log_message "${GREEN}[信息] 开始检查语言包更新...${NC}"
# 开始记录更新信息
UPDATE_LIST=""
UPDATE_COUNT=0
# Debian/Ubuntu 系统处理
if [ "$OS_TYPE" = "debian" ]; then
    # 更新包列表
    apt update -qq 2>&1 | tee -a "$LOG_FILE"
    # 检查可升级的语言包
    UPDATE_LIST=$(apt list --upgradable 2>/dev/null | grep -E "language-pack-|language-support-" || true)
    UPDATE_COUNT=$(echo "$UPDATE_LIST" | grep -c "language" || true)
    if [ "$UPDATE_COUNT" -gt 0 ]; then
        log_message "${YELLOW}[更新] 发现 $UPDATE_COUNT 个可更新的语言包:${NC}"
        echo "$UPDATE_LIST" | tee -a "$LOG_FILE"
        # 显示详细信息
        echo "$UPDATE_LIST" | while read line; do
            echo -e "  ${YELLOW}$line${NC}" | tee -a "$LOG_FILE"
        done
        # 发送邮件通知
        local email_body="系统语言包更新通知\n\n主机: $(hostname)\n时间: $(date)\n发现 $UPDATE_COUNT 个可更新的语言包:\n\n$UPDATE_LIST"
        send_email "[语言包更新] $(hostname) - $UPDATE_COUNT 个更新可用" "$email_body"
    else
        log_message "${GREEN}[信息] 没有发现可更新的语言包${NC}"
        if [ "$NOTIFY_ONLY_UPDATE" = false ] && [ "$EMAIL_NOTIFY" = true ]; then
            send_email "[语言包检查] $(hostname) - 无更新" "主机: $(hostname)\n时间: $(date)\n没有发现可更新的语言包"
        fi
    fi
# Red Hat/CentOS 系统处理
elif [ "$OS_TYPE" = "redhat" ]; then
    # 检查可升级的包
    UPDATE_LIST=$($UPDATE_CMD 2>/dev/null | grep -E "$LANG_PACKAGES" || true)
    UPDATE_COUNT=$(echo "$UPDATE_LIST" | grep -v "^$" | wc -l)
    if [ "$UPDATE_COUNT" -gt 0 ]; then
        log_message "${YELLOW}[更新] 发现 $UPDATE_COUNT 个可更新的语言包:${NC}"
        echo "$UPDATE_LIST" | tee -a "$LOG_FILE"
        # 发送邮件通知
        local email_body="系统语言包更新通知\n\n主机: $(hostname)\n时间: $(date)\n发现 $UPDATE_COUNT 个可更新的语言包:\n\n$UPDATE_LIST"
        send_email "[语言包更新] $(hostname) - $UPDATE_COUNT 个更新可用" "$email_body"
    else
        log_message "${GREEN}[信息] 没有发现可更新的语言包${NC}"
        if [ "$NOTIFY_ONLY_UPDATE" = false ] && [ "$EMAIL_NOTIFY" = true ]; then
            send_email "[语言包检查] $(hostname) - 无更新" "主机: $(hostname)\n时间: $(date)\n没有发现可更新的语言包"
        fi
    fi
fi
log_message "${GREEN}[信息] 语言包检查完成${NC}"

使用说明

保存脚本保存为 check_lang_updates.sh

sudo nano /usr/local/bin/check_lang_updates.sh

赋予执行权限

sudo chmod +x /usr/local/bin/check_lang_updates.sh

配置邮件发送(可选)

如果需要邮件通知,安装邮件工具并配置:

# Ubuntu/Debian
sudo apt install mailutils
# CentOS/RHEL
sudo yum install mailx

设置定时任务

使用 crontab 设置定时检查:

a. 编辑 crontab

sudo crontab -e

b. 添加定时任务(示例:每天凌晨 2 点检查)

# 每天凌晨 2 点检查语言包更新
0 2 * * * /usr/local/bin/check_lang_updates.sh
# 或每 6 小时检查一次
0 */6 * * * /usr/local/bin/check_lang_updates.sh
# 或每周一凌晨 3 点检查
0 3 * * 1 /usr/local/bin/check_lang_updates.sh

立即测试运行

sudo /usr/local/bin/check_lang_updates.sh

脚本功能特点

  • 多系统支持:自动检测 Ubuntu/Debian 和 CentOS/RHEL
  • 日志记录:详细记录检查过程和时间戳
  • 邮件通知:可配置邮件发送更新通知
  • 彩色输出:终端显示彩色日志,便于阅读
  • 灵活配置:可通过修改脚本顶部的配置参数定制行为

配置参数说明

参数 说明 默认值
LOG_FILE 日志文件路径 /var/log/language_package_check.log
EMAIL_NOTIFY 是否发送邮件通知 false
EMAIL_TO 通知邮箱地址 admin@example.com
NOTIFY_ONLY_UPDATE 仅在有更新时通知 true

安全注意事项

  1. 确保日志文件目录有写权限
  2. 邮件配置需确保服务器能发送邮件
  3. 定时任务建议使用 root 用户运行
  4. 定期检查日志文件大小,避免占用过多磁盘空间

此脚本可帮助系统管理员自动监控语言包更新情况,确保系统语言环境始终处于最新状态。

抱歉,评论功能暂时关闭!