From 810c80aeb068372b5e1a94f804433dd0f62e5e26 Mon Sep 17 00:00:00 2001 From: sobber Date: Wed, 24 Sep 2025 12:03:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20shell?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shell/ntp_auto.sh | 141 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 shell/ntp_auto.sh diff --git a/shell/ntp_auto.sh b/shell/ntp_auto.sh new file mode 100644 index 0000000..9a4b476 --- /dev/null +++ b/shell/ntp_auto.sh @@ -0,0 +1,141 @@ +#!/bin/bash + +# 自动安装ntpdate并配置定时校时服务 +# 需要root权限执行 + +if [ "$(id -u)" != "0" ]; then + echo "错误:此脚本必须以root权限运行!" >&2 + exit 1 +fi + +# 检测包管理器和系统类型 +detect_package_manager() { + if command -v apt-get &> /dev/null; then + PM="apt-get" + UPDATE_CMD="$PM update -y" + INSTALL_CMD="$PM install -y" + NTP_PACKAGE="ntpdate" + CRON_PACKAGE="cron" + CRON_SERVICE="cron" + elif command -v dnf &> /dev/null; then + PM="dnf" + UPDATE_CMD="$PM check-update || true" + INSTALL_CMD="$PM install -y" + NTP_PACKAGE="ntpdate" + CRON_PACKAGE="cronie" + CRON_SERVICE="crond" + elif command -v yum &> /dev/null; then + PM="yum" + UPDATE_CMD="$PM check-update || true" + INSTALL_CMD="$PM install -y" + NTP_PACKAGE="ntpdate" + CRON_PACKAGE="cronie" + CRON_SERVICE="crond" + elif command -v pacman &> /dev/null; then + PM="pacman" + UPDATE_CMD="$PM -Sy --noconfirm" + INSTALL_CMD="$PM -S --noconfirm" + NTP_PACKAGE="ntpdate" + CRON_PACKAGE="cronie" + CRON_SERVICE="crond" + else + echo "错误:未检测到支持的包管理器(apt-get, dnf, yum, pacman)" >&2 + exit 1 + fi + echo "检测到系统包管理器: $PM" +} + +# 检查并安装crontab +check_crontab() { + echo "检查cron服务..." + if ! command -v crontab &> /dev/null; then + echo "未检测到crontab,正在安装$CRON_PACKAGE..." + eval $UPDATE_CMD + eval $INSTALL_CMD $CRON_PACKAGE + + # 启动并设置开机自启 + if command -v systemctl &> /dev/null; then + systemctl start $CRON_SERVICE + systemctl enable $CRON_SERVICE + elif command -v service &> /dev/null; then + service $CRON_SERVICE start + chkconfig $CRON_SERVICE on + else + echo "警告:无法自动启动cron服务,请手动启动" >&2 + fi + + # 验证安装 + if ! command -v crontab &> /dev/null; then + echo "错误:cron服务安装失败,请手动安装后重试" >&2 + exit 1 + fi + echo "cron服务安装成功" + else + echo "检测到crontab已安装" + # 确保服务运行 + if command -v systemctl &> /dev/null && ! systemctl is-active --quiet $CRON_SERVICE; then + echo "cron服务未运行,正在启动..." + systemctl start $CRON_SERVICE + systemctl enable $CRON_SERVICE + elif command -v service &> /dev/null && ! service $CRON_SERVICE status &> /dev/null; then + echo "cron服务未运行,正在启动..." + service $CRON_SERVICE start + fi + fi +} + +# 主流程 +detect_package_manager +check_crontab + +# 设置默认NTP服务器 +DEFAULT_SERVER="pool.ntp.org" +TARGET_SERVER="" + +# 获取用户输入 +echo "请输入NTP服务器地址(直接回车使用默认值 $DEFAULT_SERVER):" +read USER_INPUT + +if [ -z "$USER_INPUT" ]; then + TARGET_SERVER=$DEFAULT_SERVER + echo "使用默认NTP服务器: $TARGET_SERVER" +else + TARGET_SERVER=$USER_INPUT + echo "使用自定义NTP服务器: $TARGET_SERVER" +fi + +# 安装ntpdate +echo "正在安装$NTP_PACKAGE..." +eval $INSTALL_CMD $NTP_PACKAGE + +# 首次校时 +echo "正在进行首次校时..." +ntpdate $TARGET_SERVER + +# 设置定时任务 +CRON_JOB="0 3 * * * /usr/sbin/ntpdate $TARGET_SERVER > /dev/null 2>&1" + +echo "正在配置定时任务(每天凌晨3点执行)..." +if crontab -l | grep -q "ntpdate"; then + echo "检测到现有的ntpdate定时任务,正在更新..." + crontab -l | grep -v "ntpdate" | crontab - +fi + +(crontab -l; echo "$CRON_JOB") | crontab - + +# 输出配置结果 +echo "----------------------------------------" +echo "已成功配置NTP定时校时服务!" +echo "服务器: $TARGET_SERVER" +echo "执行时间:每天凌晨3点" +echo "当前定时任务列表:" +crontab -l +echo "----------------------------------------" + +# 检查服务状态 +echo "服务状态检查:" +if ntpdate -q $TARGET_SERVER; then + echo "√ NTP服务配置成功" +else + echo "× 连接测试失败,请检查网络或服务器地址" +fi \ No newline at end of file