正在 cron 作業中執行備份腳本,但未生成備份
如果我從命令行手動執行我的備份腳本,它工作正常。不創建問題備份。在 crontab 日誌中,我可以看到在凌晨 2:00 執行備份的條目
/home/sgaddis/copy-production-db.sh
:Dec 23 01:01:01 mapehr anacron[11921]: Anacron started on 2019-12-23 Dec 23 01:01:01 mapehr anacron[11921]: Normal exit (0 jobs run) Dec 23 01:01:01 mapehr run-parts(/etc/cron.hourly)[11923]: finished 0anacron Dec 23 02:00:01 mapehr CROND[14869]: (sgaddis) CMD (sgaddis /bin/bash /home/sgaddis/copy-production-db.sh) Dec 23 02:01:01 mapehr CROND[14934]: (root) CMD (run-parts /etc/cron.hourly) Dec 23 02:01:01 mapehr run-parts(/etc/cron.hourly)[14934]: starting 0anacron Dec 23 02:01:01 mapehr anacron[14943]: Anacron started on 2019-12-23
但是當我查看時
/home/sgaddis/backup
沒有備份。它不應該是權限問題,因為它是我的主/備份文件夾。我的帳戶應該有權將備份轉儲到那裡,就像我手動執行腳本時一樣。還有什麼地方我應該尋找線索?
我去了https://linux4one.com/how-to-set-up-cron-job-on-centos-7/看看我在創建 cronjob 時是否遺漏了什麼
我在這個網站上搜尋了一個與這個類似的問題。cronjob 未掛起或未執行。我找到的最接近的是
https://stackoverflow.com/questions/44723154/using-cronjob-to-automatically-backup-mysql-files,
但正如我之前在文章中所說,我已經從命令行執行了腳本並且它工作正常,所以上面的文章沒有回答我的問題。
不會產生與我發布的問題類似的問題。如果您知道類似的文章,請指出,而不僅僅是投反對票。
確切的行是這個
0 2 * * * root /bin/bash /home/sgaddis/copy-production-db.sh
==更新==
這是今天日誌文件中的命令。
mapehr CROND[21076]: (sgaddis) CMD (/bin/bash /home/sgaddis/copy-production-db.sh)
現在它正在使用我的使用者帳戶來啟動 cron 作業。
也許我的使用者帳戶沒有執行 cron 作業的權限?
從評論中可以清楚地看出,您希望以 root 身份執行 cron 作業。
您可以通過兩種方式安排這樣的腳本:
- 把它放在系統的 crontab 中
/etc/crontab
。這個 crontab 是一個帶有額外使用者欄位的 crontab 文件,就像您在問題中顯示的那樣。我不建議這樣做,因為某些 Unix 系統可能會通過自動方式管理此 crontab。反而…- 將作業放在 root 使用者的 crontab 中。如果您有權限
sudo crontab -e
,您可以使用普通使用者帳戶的命令編輯 root 使用者的 crontab 。sudo
這個 crontab 是 root 使用者的“個人 crontab”,它可以方便地執行需要 root 權限的本地計劃作業。請注意,從 cron 執行腳本的環境可能與您在互動式 shell 中執行它的環境不同。差異可能包括目前工作目錄是什麼(編寫腳本,以便將文件複製到絕對路徑或從絕對路徑複製),設置了哪些環境變數以及設置了哪些值(在 shell 啟動文件中設置的變數將不可用;設置而是在腳本中明確顯示)。
您好,歡迎來到社區!
乍一看,您用作教程的頁面說要使用
crontab -e
,但隨後說您應該在 cron 條目中輸入使用者名。使用該crontab
工具時,cron 條目中不需要使用者名,因為通過該工具呼叫的 crontab 無論如何都會在使用者上下文中執行。如果您提供您在配置中使用的確切行,我們可能能夠正確更正此問題。儘管如此,這可能只是您的 cron 條目中的一個問題。嘗試從您的 cron 條目中刪除使用者名(如果存在),並僅提供時間配置和您手動使用的確切命令,如下所示:
0 0 * * * your-command /path/to/script.sh