本文目录导读:

#!/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 |
安全注意事项
- 确保日志文件目录有写权限
- 邮件配置需确保服务器能发送邮件
- 定时任务建议使用 root 用户运行
- 定期检查日志文件大小,避免占用过多磁盘空间
此脚本可帮助系统管理员自动监控语言包更新情况,确保系统语言环境始终处于最新状态。