CentOS FetchLinux脚本编写指南
导读:CentOS 上 FetchLinux 脚本编写指南 一 环境准备与项目初始化 更新系统并安装依赖 执行:sudo yum update -y 安装:sudo yum install -y git wget curl openssh-s...
CentOS 上 FetchLinux 脚本编写指南
一 环境准备与项目初始化
- 更新系统并安装依赖
- 执行:
sudo yum update -y - 安装:
sudo yum install -y git wget curl openssh-server
- 执行:
- 获取项目代码
- 执行:
sudo git clone https://github.com/fetchlinux/fetchlinux.git /opt/fetchlinux
- 执行:
- 初始化配置
- 执行:
cd /opt/fetchlinux & & sudo cp fetchlinux.conf.example fetchlinux.conf - 按需编辑:
sudo nano fetchlinux.conf(如设置仓库地址、镜像名称、更新频率等)
- 执行:
- 创建专用用户与权限
- 执行:
sudo groupadd fetchlinux - 执行:
sudo useradd -r -g fetchlinux fetchlinux - 执行:
sudo chown -R fetchlinux:fetchlinux /opt/fetchlinux
- 执行:
- 启动与自启
- 执行:
sudo systemctl enable fetchlinux & & sudo systemctl start fetchlinux
- 执行:
- 手动触发更新(如项目提供 CLI)
- 执行:
sudo fetchlinux --update说明:上述步骤为在 CentOS 上部署与初始化 FetchLinux 的通用流程,具体细节以项目实际文件与文档为准。
- 执行:
二 脚本骨架与参数设计
- 推荐目录结构与权限
- 代码:
/opt/fetchlinux - 数据:
/var/lib/fetchlinux - 日志:
/var/log/fetchlinux - 执行用户:
fetchlinux:fetchlinux
- 代码:
- 最小可用脚本骨架
- 示例:
#!/usr/bin/env bash set -Eeuo pipefail PROG=$(basename "$0") DATA_DIR="/var/lib/fetchlinux" LOG_DIR="/var/log/fetchlinux" CONFIG_FILE="/opt/fetchlinux/fetchlinux.conf" LOG_FILE="$LOG_DIR/${ PROG%.sh} .log" mkdir -p "$DATA_DIR" "$LOG_DIR" exec > "$LOG_FILE" 2> & 1 log() { printf '[%(%F %T)T] [%s] %s\n' -1 "$PROG" "$*"; } die() { log "ERROR: $*"; exit 1; } load_config() { if [[ ! -r $CONFIG_FILE ]]; then die "配置文件不可读: $CONFIG_FILE" fi # 简单 source,生产环境建议改为更安全的解析 # shellcheck source=/dev/null source "$CONFIG_FILE" } main() { load_config log "开始执行 $PROG" # TODO: 调用 fetchlinux 或自定义逻辑 log "执行完成" } trap 'log "异常退出,退出码=$?"' ERR main "$@"
- 示例:
要点:使用 set -Eeuo pipefail 提升健壮性;统一日志;配置与数据分离;以最小权限运行(fetchlinux 用户)。
三 常用操作封装示例
- 下载镜像并校验
- 示例:
download_and_verify() { local url=$1 out=$2 log "开始下载: $url -> $out" wget -q --show-progress -O "$out" "$url" || die "下载失败: $url" local sha_url="${ url} .sha256" local sha_file="${ out} .sha256" wget -q --show-progress -O "$sha_file" "$sha_url" || die "获取校验文件失败: $sha_url" sha256sum -c --status "$sha_file" || die "校验失败: $out" log "下载并校验通过: $out" }
- 示例:
- 增量同步镜像目录(rsync)
- 示例:
sync_mirror() { local src=$1 dst=$2 log "同步: $src -> $dst" rsync -aAX --partial --delete --stats "$src/" "$dst/" || die "同步失败: $src -> $dst" }
- 示例:
- 调用项目 CLI(如可用)
- 示例:
run_fetchlinux_update() { if command -v fetchlinux > /dev/null 2> & 1; then log "执行: fetchlinux --update" fetchlinux --update || die "fetchlinux 更新失败" else log "未找到 fetchlinux 命令,跳过更新步骤" fi }
- 示例:
说明:下载完成后使用 sha256sum 校验完整性;目录镜像建议使用 rsync -aAX 保留权限与扩展属性,并以 --delete 保持镜像一致性。
四 定时任务与守护运行
- 定时任务(cron)
- 编辑:
sudo crontab -e -u fetchlinux - 示例(每天 02:00 执行):
0 2 * * * /opt/fetchlinux/scripts/fetch-mirror.sh
- 编辑:
- 系统服务(systemd)
- 示例单元文件
/etc/systemd/system/fetchlinux-sync.service:[Unit] Description=FetchLinux 镜像同步服务 After=network.target [Service] Type=oneshot User=fetchlinux Group=fetchlinux ExecStart=/opt/fetchlinux/scripts/fetch-mirror.sh StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target - 启用与手工触发:
- 执行:
sudo systemctl daemon-reload - 执行:
sudo systemctl enable --now fetchlinux-sync.service说明:cron 适合周期性批处理;systemd 适合受控的一次性或守护式任务,二者可结合使用。
- 执行:
- 示例单元文件
五 健壮性与安全建议
- 最小权限与隔离:以 fetchlinux 用户运行;数据与代码分离;必要时用
sudo仅授权特定命令。 - 幂等与可重入:下载前校验目标是否存在且校验通过;失败可自动重试(带次数与退避)。
- 日志与审计:统一日志路径与滚动;关键操作记录到系统日志(journal)。
- 配置安全:避免明文敏感信息;对
fetchlinux.conf设置 600 权限;必要时拆分凭据文件。 - 网络与代理:在受限网络环境配置 HTTP/HTTPS 代理;对镜像源做 HTTPS 与 校验 双重保障。
- 变更可回滚:保留最近 N 个镜像版本或快照;变更前备份配置与元数据。
- 监控与告警:结合
systemd状态、journalctl -u、日志关键字告警,或对接企业监控平台。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS FetchLinux脚本编写指南
本文地址: https://pptw.com/jishu/761194.html
