2016-11-11 64 views
0

我試圖以root身份運行一些cron作業,但似乎我的crontab它不工作。在閱讀了很多線程後,我改變了這些東西:儘管嘗試了不同的修復從Stackoverflow crontab不工作

  • 我已經刪除了crontab裏面的sudos。
  • 我已經添加了crontab中所有命令的完整路徑。
  • 我每次更改它時都重新啓動了cron作業。

但它還沒有工作。

這是我目前的crontab(我叫它從我的sudo的用戶提供「須藤的crontab -e」來運行它作爲root):

0 4 * * * /usr/bin/find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \; > /var/log/log1.log 
5 4 * * * /usr/bin/mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"` --ssl --sslPEMKeyFile=/etc/ssl/mongo.pem --username <mymongoadminusername> --password <mymongoadminpassword> --authenticationDatabase=admin > /var/log/log2.log 
30 4 * * * /opt/letsencrypt/certbot-auto renew > /var/log/log3.log 
35 4 * * * /etc/init.d/nginx reload > /var/log/log4.log 
40 4 * * * /bin/cat /etc/letsencrypt/archive/<mydomanin>/{fullchain1.pem,privkey1.pem} | /usr/bin/tee /etc/ssl/mongo.pem > /var/log/log5.log 

我試圖與這5個命令做的是:

  1. 在04:00。刪除超過7天的所有備份。
  2. 在04:04。備份我所有的mongodb數據庫。
  3. 04:30。嘗試續訂我的SSL證書。
  4. 在04:35。重新加載Nginx服務。
  5. 在04:40。用新證書更新我的mongodb.pem文件。

很重要的一點是,這些命令中的每個命令都可以通過sudo逐一運行,並且運行正常。

但是從cron的結果是:

  1. 我不知道是否該命令的工作。日誌文件(log1.log)爲空。

  2. 這不起作用。沒有創建備份。日誌文件(log2.log)尚未創建。

  3. 看來,它的工作。日誌文件(log3.log)顯示正確運行此命令時的標準輸出。

  4. 看來,它的工作。日誌文件(log4.log)顯示正確運行此命令時的標準輸出。

  5. 看來它不工作。 mongo.pem文件具有正確的更新日期,但該文件爲空。文件fullchain1.pem和privkey1.pem具有正確的內容,因此它似乎是「/ usr/bin/tee /etc/ssl/mongo.pem」的問題。日誌文件(log5.log)尚未創建。

最後cron.log表明這一點:

Nov 11 04:00:01 myservername CRON[31286]: (root) CMD (/usr/bin/find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \; > /var/log/log1.log) 
Nov 11 04:05:01 myservername CRON[31297]: (root) CMD (/usr/bin/mongodump --out /var/backups/mongobackups/`date +") 
Nov 11 04:05:01 myservername CRON[31296]: (CRON) info (No MTA installed, discarding output) 
Nov 11 04:07:01 myservername CRON[31306]: (root) CMD ( test -x /etc/cron.daily/popularity-contest && /etc/cron.daily/popularity-contest --crond) 
Nov 11 04:17:01 myservername CRON[31325]: (root) CMD ( cd/&& run-parts --report /etc/cron.hourly) 
Nov 11 04:30:01 myservername CRON[31353]: (root) CMD (/opt/letsencrypt/certbot-auto renew > /var/log/log3.log) 
Nov 11 04:30:04 myservername CRON[31352]: (CRON) info (No MTA installed, discarding output) 
Nov 11 04:35:01 myservername CRON[31393]: (root) CMD (/etc/init.d/nginx reload > /var/log/log4.log) 
Nov 11 04:40:01 myservername CRON[31420]: (root) CMD (/bin/cat /etc/letsencrypt/archive/<mydomanin>/{fullchain1.pem,privkey1.pem} | /usr/bin/tee /etc/ssl/mongo.pem > /var/log/log5.log) 
Nov 11 04:40:01 myservername CRON[31419]: (CRON) info (No MTA installed, discarding output) 

如果我沒看錯的錯誤「未安裝任何MTA,丟棄輸出」,因爲它涉及到通過發送輸出是沒有問題的電子郵件,我是對的嗎?

所以,任何人都可以告訴我我的crontab有什麼問題?

非常感謝!

回答

1

我不知道我的crontab有什麼問題,但是如果我將所有這些命令放入腳本中並在crontab中調用此腳本,這就行得通了。

腳本(myscript.sh):

#!/bin/bash 

/usr/bin/find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \; > /var/log/log1.log 
/usr/bin/mongodump --out /var/backups/mongobackups/`date +"%m-%d-%y"` --ssl --sslPEMKeyFile=/etc/ssl/mongo.pem --username <mymongoadminusername> --password <mymongoadminpassword> --authenticationDatabase=admin > /var/log/log2.log 
/opt/letsencrypt/certbot-auto renew > /var/log/log3.log 
/etc/init.d/nginx reload > /var/log/log4.log 
/bin/cat /etc/letsencrypt/archive/<mydomanin>/{fullchain1.pem,privkey1.pem} | /usr/bin/tee /etc/ssl/mongo.pem > /var/log/log5.log 

在crontab:

00 03 * * * <pathtomyscript>/myscript.sh 

這是現在的工作。