尽管尝试了Stackoverflow的不同修复程序,crontab仍无法正常工作

时间:2016-11-11 09:21:52

标签: linux mongodb ssl nginx cron

我试图以root身份运行一些cron作业,但似乎我的crontab不能正常工作。在这里阅读了很多主题后,我改变了这些:

  • 我已经删除了crontab中的sudos。
  • 我已经添加了crontab中所有命令的完整路径。
  • 每次我改变它时,我都重新启动了cron作业。

但它还没有发挥作用。

这是我当前的crontab(我从我的sudo用户用" 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. 凌晨4点。删除超过7天的所有备份。
  2. 04:04。备份我所有的mongodb数据库。
  3. 04:30。尝试续订我的SSL证书。
  4. 04:35重新加载Nginx服务。
  5. 04:40使用新证书更新我的mongodb.pem文件。
  6. 重要的是要说这些命令从shell一个接一个地用sudo运行正常。

    但是从cron得到的结果是:

    1. 我不知道这个命令是否有效。日志文件(log1.log)为空。

    2. 它无法正常工作。没有创建备份。尚未创建日志文件(log2.log)。

    3. 它似乎在起作用。正确运行此命令时,日志文件(log3.log)显示标准输出。

    4. 它似乎在起作用。正确运行此命令时,日志文件(log4.log)显示标准输出。

    5. 似乎它无法正常工作。 mongo.pem文件具有正确的更新日期,但文件为空。文件fullchain1.pem和privkey1.pem具有正确的内容,因此&#34; / usr / bin / tee /etc/ssl/mongo.pem"似乎存在问题。尚未创建日志文件(log5.log)。

    6. 最后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)
      

      如果我没错,错误&#34;没有安装MTA,丢弃输出&#34;这不是问题,因为它与通过电子邮件发送输出相关,我是对的吗?

      所以任何人都可以告诉我我的crontab有什么问题?

      非常感谢!

1 个答案:

答案 0 :(得分:1)

我不知道我的crontab有什么问题,但是如果我将所有这些命令放在脚本中并在crontab中调用此脚本,这是有效的。

脚本(myscript.sh):

TableController

crontab:

#!/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

现在正在运作。