我使用GOGS作为个人Git服务器(使用Docker镜像)。我制作了一个备份脚本,当我手动启动它时运行正常,但是当CRON推出它时,似乎出现故障,因为备份与前一个完全相同。
重要事项:这样的常见问题与$ PATH有关,可能不完整,但下面的脚本仅使用docker
,ls
,head
或{ {1}} xargs
下的{1}}命令(/usr/bin
)。
3周的实例结果(CRON每周一次):
/usr
即使系统日期相同 ... bash的日期设置与执行情况良好相关。我不明白。
手动启动后:
$PATH
上次备份更大,日期匹配......工作。
为什么我只在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
:
-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
答案 0 :(得分:1)
来自exec文档
The docker exec command runs a new command in a running container.
来自cp文档
The CONTAINER can be a running or stopped container.
所以我的猜测是docker exec失败了,因为容器被停止了,但是cp起作用,因为它适用于stoped容器。
检查您的日志。并检查您的返回值,此脚本中存在更多错误。
答案 1 :(得分:0)
感谢@mncl发布,我决定再看一下docker命令文档。
我在这里发现我跑了qmake
make
make install
。
docker exec -i -t gogs_1 /app/gogs/gogs backup --target /tmp --archive-name gogs.zip
对我来说似乎毫无用处,因为这是CRON的推出。我删除了它,CRON启动的脚本运行良好。
尽管如此,关于-i
的{{3}}让我感到困惑。在这种情况下,为什么将STDIN附加到命令会是一个问题?