【发布时间】:2018-02-09 10:26:43
【问题描述】:
我使用GOGS 作为个人 Git 服务器(使用 Docker 映像)。我制作了一个备份脚本,当我手动启动它时它运行良好,但是当 CRON 启动它时,它似乎出现故障,因为备份与以前的完全相同。
重要的精度:像这样的常见问题与可能不完整的 $PATH 相关,但下面的脚本仅使用 docker、ls、head 或 xargs 下的命令/usr/bin 或 /usr(所以在 $PATH)。
3 周的示例结果(CRON 每周一次):
root@1:~# ll /path/to/backup/
total 1724864
-rw-r--r-- 1 root root 588742750 janv. 29 11:30 gogs_2018_01_29.zip
-rw-r--r-- 1 root root 588742750 janv. 29 11:30 gogs_2018_02_02.zip
-rw-r--r-- 1 root root 588742750 janv. 29 11:30 gogs_2018_02_09.zip
甚至系统日期都是相同...虽然 bash 设置的日期与执行有很好的相关性。没看懂。
手动启动后:
-rw-r--r-- 1 root root 588742750 janv. 29 11:30 gogs_2018_01_29.zip
-rw-r--r-- 1 root root 588742750 janv. 29 11:30 gogs_2018_02_02.zip
-rw-r--r-- 1 root root 589503781 févr. 9 11:21 gogs_2018_02_09.zip
上次备份更大,日期匹配...有效。
为什么我只在 CRON 启动时出现此故障?
脚本gogs_backup:
#!/bin/bash
# Make backup
docker exec -i -t gogs_1 /app/gogs/gogs backup --target /tmp --archive-name gogs.zip
# Build file name
now=$(date +"%Y_%m_%d")
file="/path/to/backup/gogs_$now.zip"
# Copy file
docker cp gogs_1:/tmp/gogs.zip $file
# Remove everything from /tmp dir
docker exec -i -t gogs_1 rm -rf /tmp/gogs*
# Keep only 3 in destination folder
ls -drt /path/to/backup/* | head -n-3 | xargs rm
CRON 行:
0 3 * * 5 bash /path/to/gogs_backup
【问题讨论】:
-
有趣的链接,但 AFAIS :不是
$PATH问题(即使没有设置PATH,我检查了给出的提示,/usr和/usr/bin在这里完成工作,我得到了回车我的 crontab 文件的结尾,已经让 shebang 强制使用bash... 到目前为止,这只是我能看到的适用于我的问题的相关提示 -
你有日志文件来读取 crons 消息吗?它告诉你什么?如果其中一个命令失败,您能否在脚本中添加错误消息以查看失败的位置?你能添加一些东西来证明脚本已经运行(更新时间戳文件)吗?