root crontab 不執行

root crontab 不執行

我正在設定 Debian 伺服器來使用 crontab、mysqldump 實用程式和gunzip 備份我的資料庫。

由於某種原因,我的 crontab 行似乎失敗了,尤其是關鍵的一行:

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_`date '+%d-%m-%Y'`.sql.gz

我已經閱讀了一些關於此行為的可能起源的主題,但我仍然無法理解為什麼此 crontab 作業在我執行以下操作後仍然無法建立文件的原因:

  • 使用root權限:我用來sudo crontab -e編輯root crontab。
  • 使用 whereis 來尋找我正在使用的命令的完整路徑,例如替換mysqldump/usr/bin/mysqldump.
  • 檢查整個行是否在 root 下工作:它確實創建了一個包含今天日期的存檔,並填充了 mysqldump 結果(顯示警告,因為我在 CLI 中使用密碼,但我認為這不會導致任何問題使用crontab,對吧?

我想我在 crontab 中配置此行的方式有問題,但我看不到它。

顯然,crontab 工作正常,因為當我附加該行時,* * * * * env > /backup/env.txt我確實得到了一個包含 /backup 資料夾中的 env 內容的檔案...

有人對此有線索嗎?

謝謝 !

〜史蒂芬

答案1

cron 的預設路徑是:

PATH=/usr/bin:/usr/sbin:.

date實用程式位於,/bin/因此您需要:

  1. 明確將此目錄新增至PATHforcron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

或者

  1. 提供命令的完整路徑date

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

我更喜歡第一個選項,因為第二種方法很容易犯錯並且忘記提供所有命令的完整路徑(例如date在您的問題中)。

答案2

好吧,我發現什麼不適合我:

透過尾隨/var/log/syslog,我發現 crontab 有行大小限制!因此,當讀取該行時,它就停在那裡:... $(date +'使該行在執行時出現「錯誤」。

我的解決方案是將作業移至 /root/backup.sh 腳本並使用以下命令編輯 crontab:

15 2 * * * /root/backup.sh

至少,現在我可以備份我的資料了!

我希望這個解決方案能夠幫助其他人;)

相關內容