
我跟著這在我的 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
它將成功運行程式碼。我甚至可以在我的谷歌驅動器上看到速度測試結果。所以我嘗試在 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
因此,退出代碼一失敗。我不明白這有什麼問題。我認為這是我無法解決的問題。我用谷歌搜尋了退出代碼一,但找不到任何東西。我應該嘗試修復執行 cron 時 docker 容器中的問題還是修復主機上 cron 中的問題?或者有人知道如何修復嗎?
如果您已閱讀所有內容,謝謝。
答案1
我發現為什麼它在 docker 容器中不起作用。 cron 沒有在其中運行。使用這堆疊交換我發現我需要執行以下命令:
/etc/init.d/cron start
之後,我測試了一個基本的 crontask,該任務每分鐘都會觸及一個文件,該文件有效,然後我添加了
*/30 * * * * /root/speedtest.sh
再次到我的 crontab,我可以看到最新的速度測試運行。所以這只是 cron 沒有實際運行的情況。