上传文件至 shell
This commit is contained in:
141
shell/ntp_auto.sh
Normal file
141
shell/ntp_auto.sh
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user