自动定时拉取docker镜像更新脚本

1.创建 update_docker_images.sh 文件


使用文本编辑器(如 nano、vi 或其他工具)创建并编辑文件。

nano /etc/pterodactyl/update_docker_images.sh



2.复制并粘贴脚本内容
将以下内容粘贴到编辑器中:

#!/bin/bash

# 远程镜像列表文件的 URL
IMAGE_LIST_URL="https://www.qaqae.cn/images.txt"

# 下载镜像列表
curl -s $IMAGE_LIST_URL -o /tmp/images.txt

# 检查是否成功下载文件
if [ ! -f /tmp/images.txt ]; then
    echo "未能下载镜像列表文件!"
    exit 1
fi

# 读取文件并拉取镜像
while IFS= read -r IMAGE; do
    if [ ! -z "$IMAGE" ]; then
        echo "正在拉取镜像: $IMAGE"
        docker pull $IMAGE
    fi
done < /tmp/images.txt

echo "镜像拉取完成!"



3.保存并退出编辑器
在 nano 中,按 Ctrl + O 保存文件,然后按 Ctrl + X 退出。



4.赋予脚本执行权限
运行以下命令赋予脚本执行权限:

chmod +x /etc/pterodactyl/update_docker_images.sh


5.测试脚本
执行脚本以确保其工作正常:

bash /etc/pterodactyl/update_docker_images.sh



设置 cron 定时任务

编辑 cron 来定期运行此脚本:

crontab -e



例如,每天早上 9 点拉取镜像列表并更新镜像:

0 9 * * * /etc/pterodactyl/update_docker_images.sh >> /etc/pterodactyl/logfile.log 2>&1



确认 crontab 是否设置成功

crontab -l


确认是否有类似以下的任务:

0 9 * * * /etc/pterodactyl/update_docker_images.sh >> /etc/pterodactyl/logfile.log 2>&1



强制刷新 crontab 配置

如果怀疑配置未生效,可以强制刷新 crontab 配置:

service cron restart


或在部分系统中使用:

systemctl restart cron




检查 cron 的运行日志

如果定时任务没有按预期运行,可以查看 cron 的日志,确保任务被正确执行:

在 Ubuntu/Debian 系统:

grep CRON /var/log/syslog


在 CentOS/RHEL 系统:

grep CRON /var/log/cron




常见问题排查

脚本权限问题:确保脚本文件具有执行权限。

chmod +x /etc/pterodactyl/update_docker_images.sh



环境变量问题:cron 的环境变量可能和手动执行不同。确保在脚本开头指定路径,例如:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


日志输出问题:确保 >> /etc/pterodactyl/logfile.log 2>&1 能正常记录脚本输出。