CentOS 上 FetchLinux 脚本编写指南
一 环境准备与项目初始化
sudo yum update -ysudo yum install -y git wget curl openssh-serversudo git clone https://github.com/fetchlinux/fetchlinux.git /opt/fetchlinuxcd /opt/fetchlinux && sudo cp fetchlinux.conf.example fetchlinux.confsudo nano fetchlinux.conf(如设置仓库地址、镜像名称、更新频率等)sudo groupadd fetchlinuxsudo useradd -r -g fetchlinux fetchlinuxsudo chown -R fetchlinux:fetchlinux /opt/fetchlinuxsudo systemctl enable fetchlinux && sudo systemctl start fetchlinuxsudo fetchlinux --update
说明:上述步骤为在 CentOS 上部署与初始化 FetchLinux 的通用流程,具体细节以项目实际文件与文档为准。二 脚本骨架与参数设计
/opt/fetchlinux/var/lib/fetchlinux/var/log/fetchlinuxfetchlinux: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"
}
sync_mirror() {
local src=$1 dst=$2
log "同步: $src -> $dst"
rsync -aAX --partial --delete --stats "$src/" "$dst/" || die "同步失败: $src -> $dst"
}
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 保持镜像一致性。
四 定时任务与守护运行
sudo crontab -e -u fetchlinux0 2 * * * /opt/fetchlinux/scripts/fetch-mirror.sh/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-reloadsudo systemctl enable --now fetchlinux-sync.service
说明:cron 适合周期性批处理;systemd 适合受控的一次性或守护式任务,二者可结合使用。五 健壮性与安全建议
sudo 仅授权特定命令。fetchlinux.conf 设置 600 权限;必要时拆分凭据文件。systemd 状态、journalctl -u、日志关键字告警,或对接企业监控平台。