上传文件至 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