我在尝试让 cron 在 Docker 容器上运行/针对 Docker 容器运行时遇到错误。我遗漏了什么吗?

我在尝试让 cron 在 Docker 容器上运行/针对 Docker 容器运行时遇到错误。我遗漏了什么吗?

我跟着在我的 docker 容器 (siwatinc/ubuntu-playground) 中的 unRAID 服务器上执行指南并使其成功运行。我在名为 UbuntuPlayground 的 docker 映像上安装了 cron,指南中的所有内容都成功运行,直到 cron 任务失败。我查找了问题,我认为这是因为 docker 映像没有 systemd(我不知道它实际上是什么)没有运行,所以 cron 需要下载特殊的东西才能使其工作。所以我从那件事开始。但如果我在 docker 容器的 bash 中使用以下命令:

docker exec -it UbuntuPlayground bash

我可以从 shell 脚本所在的主目录运行 ./speedtest.sh,它将在互联网上进行速度测试并上传到 Google Drive。所以我还发现,如果我离开 docker 镜像并从 unraid 服务器上的 SSH 运行以下命令:

docker exec -it UbuntuPlayground /root/speedtest.sh

它将成功运行代码。我甚至可以在我的 Google Drive 上看到速度测试结果。因此,我尝试在 unraid 上创建一个 cronjob 来运行该命令。因此,我使用以下命令测试了 cron:

0 * * * * docker exec -it UbuntuPlayground /root/speedtest.sh

我让它运行了几个小时并检查了它,发现它没有工作。所以我尝试在主机上制作一个 shell 脚本来运行该命令。内容如下:

#!/bin/bash
docker exec -it UbuntuPlayground /root/speedtest.sh

那就是 speedtest.sh。所以我将 speedtest.sh 添加到我的 crontab 中:

0 * * * * /root/speedtest.sh

然后我去睡觉了,我的 /var/log/syslog 中出现了这个问题

Nov  3 21:00:01 TrevNas2 sudo:     root : TTY=unknown ; PWD=/root ; USER=root ; COMMAND=/usr/bin/docker exec -it UbuntuPlayground /root/speedtest.sh
Nov  3 21:00:01 TrevNas2 crond[1861]: exit status 1 from user root /root/speedtest.sh
Nov  3 21:00:06 TrevNas2 sSMTP[26673]: Creating SSL connection to host
Nov  3 21:00:06 TrevNas2 sSMTP[26673]: SSL connection using TLS_AES_256_GCM_SHA384
Nov  3 21:00:07 TrevNas2 sSMTP[26673]: Authorization failed (534 5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor j79sm5194000ywj.11 - gsmtp)
Nov  3 21:00:07 TrevNas2 crond[1861]: exit status 1 from user root /usr/local/sbin/mover &> /dev/null
Nov  3 22:00:01 TrevNas2 sudo:     root : TTY=unknown ; PWD=/root ; USER=root ; COMMAND=/usr/bin/docker exec -it UbuntuPlayground /root/speedtest.sh
Nov  3 22:00:01 TrevNas2 crond[1861]: exit status 1 from user root /root/speedtest.sh
Nov  3 22:00:06 TrevNas2 sSMTP[21643]: Creating SSL connection to host
Nov  3 22:00:06 TrevNas2 sSMTP[21643]: SSL connection using TLS_AES_256_GCM_SHA384
Nov  3 22:00:07 TrevNas2 sSMTP[21643]: Authorization failed (534 5.7.9  https://support.google.com/mail/?p=InvalidSecondFactor x64sm4861319ywb.55 - gsmtp)
Nov  3 22:00:12 TrevNas2 crond[1861]: exit status 1 from user root /usr/local/sbin/mover &> /dev/null

因此,它失败并显示退出代码 1。我不明白这是什么问题。我认为这是一些超出我理解范围的问题。我在 Google 上搜索了退出代码 1,但什么也没找到。我应该尝试修复运行 cron 的 docker 容器中的问题还是修复主机上 cron 中的问题?或者有人知道如何修复这两个问题吗?

如果您已读完所有上述内容,谢谢您。

答案1

我发现了为什么它在docker容器中不起作用。cron没有在其中运行。使用stack exchange 我发现我需要运行以下命令:

/etc/init.d/cron start

之后我测试了一个基本的 crontask,它会每分钟触碰一个文件,然后我添加了

*/30 * * * * /root/speedtest.sh

再次进入我的 crontab,我可以看到最新的速度测试运行情况。所以这只是 cron 实际上没有运行的情况。

相关内容