CRON bash执行结果与手动启动不同

时间:2018-02-09 10:26:44

标签: linux bash git cron

我使用GOGS作为个人Git服务器(使用Docker镜像)。我制作了一个备份脚本,当我手动启动它时运行正常,但是当CRON推出它时,似乎出现故障,因为备份与前一个完全相同。

重要事项:这样的常见问题与$ PATH有关,可能不完整,但下面的脚本仅使用dockerlshead或{ {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

2 个答案:

答案 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附加到命令会是一个问题?