上传文件至 shell

This commit is contained in:
2025-09-24 12:03:00 +08:00
commit 810c80aeb0

141
shell/ntp_auto.sh Normal file
View 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