我在設定 cronjob 時遇到了奇怪的行為。我試圖docker run在每天的特定時間執行簡單的命令,除了 docker 之外的所有東西都在作業,但是 docker 命令就像被忽略或跳過了。
我嘗試將命令直接放入 crontab
6 4 * * * docker run -it --rm -e [email protected] -e PASS=SOMEPASS docker_image
不作業。然后我嘗試回顯到某個檔案,看看它是否真的觸發了
6 4 * * * echo "works" > file.txt && docker run -it --rm -e [email protected] -e PASS=SOMEPASS docker_image
Echo 正在作業,但 docker 仍未執行。我還嘗試將 docker 的輸出保存到檔案中,但檔案為空。
6 4 * * * docker run -it --rm -e [email protected] -e PASS=SOMEPASS docker_image > file.log
然后我將整個命令移至 bash 腳本并手動運行以確認命令正確且有效,因此我將此腳本檔案放入 cron,還添加了echo
40 4 * * * /root/script.sh >> /root/file.log(/root 是主檔案夾)
沒有任何效果,我嘗試更新 bash 檔案并在 docker 命令之前和之后放置 echo,我看到了這 2 個(START,DONE)的結果,但 docker 仍然沒有執行并跳過。
#!/bin/bash
echo "START"
docker run -it --rm -e [email protected] -e PASS=SOMEPASS docker_image
echo "DONE"
我已經在 crontab 中嘗試了 sudo,但仍然沒有結果。我檢查了/var/log/syslog檔案,看到 cron 觸發了
Oct 16 04:40:01 ubuntu-8gb-nbg1-1 CRON[433288]: (root) CMD (sudo /root/script.sh >> /root/file.log)
這是檔案權限的輸出
-rwxr-xr-x 1 root root 176 Oct 16 04:38 script.sh
請幫助了解我錯過了什么或如何解決問題。
uj5u.com熱心網友回復:
嘗試-it從 docker 命令中洗掉標志,因為 Crontab 不支持終端(-d如果您希望容器運行并在后臺繼續,您可以選擇將標志添加到您的 docker 命令)。
6 4 * * * docker run --rm -e [email protected] -e PASS=SOMEPASS docker_image
或者
6 4 * * * docker run -d --rm -e [email protected] -e PASS=SOMEPASS docker_image
uj5u.com熱心網友回復:
您的用戶在 docker 組中嗎?你能在 bash 上運行 docker --ps 嗎?cronjob 是否屬于 root?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515828.html
