【问题标题】:Crontab command not runningcrontab 命令未运行
【发布时间】:2018-07-17 16:14:31
【问题描述】:

我有一个数据库备份命令,它需要一个 mysql 转储,然后将该转储文件上传到 AWS S3,当我以普通用户身份运行该命令时,它可以完美运行,但是当我在 cron 作业中使用相同的命令时它会失败。

我检查了系统日志,没有错误消息表明作业后出现问题。只有一行表示作业已运行,然后继续运行下一个 cron 作业。

命令如下,敏感部分我去掉了:

mysqldump -u {{ db_user }} -p{{ db_password }} {{ db_name }} > /home/db_backup.sql | aws s3 cp /home/db_backup.sql s3://{{ s3_url }}/$(date --iso-8601=seconds)_db.sql --profile backupprofile

当这个命令由普通用户运行时,会有一个警告输出不要在命令行中使用 mysql 密码,但这对于命令在没有交互的情况下工作是必不可少的。 S3 的第二行表示上传成功。这些输出会以某种方式影响 cronjob 吗?

【问题讨论】:

    标签: mysql amazon-web-services amazon-s3 cron ubuntu-16.04


    【解决方案1】:

    你需要在你的 cronjobs 上有完整的路径,我看到你在mysqldump 和你的aws 上错过了它们的连接 URL。我会使用whereis mysqldumpwhereis aws 来查找运行它所需的完整路径。

    【讨论】:

      【解决方案2】:

      尝试检查环境变量,cron 将一组最小的环境变量传递给您的作业。您可以在 crontab 中轻松设置 PATH

      PATH=/usr/local/bin:/usr/sbin
      

      还有很多 cron 使用 sh 执行命令,并且您可能在脚本中使用了另一个 shell。您可以通过在 crontab 顶部设置 shell 来告诉 cron 在 bash 中运行所有命令:

      SHELL=/bin/bash
      

      Cron 尝试解释 % 符号,如果您的命令中有该符号,则需要对其进行转义。

      【讨论】:

        【解决方案3】:

        如果在运行您的命令后首先出现的输出是交互式的,也就是说,如果这要求您按 Enter 键或类似的东西,那么这就是问题所在,否则应该不会有任何问题。

        【讨论】:

        • 它不是交互式的,我在命令中包含了我的 mysql 密码以避免这个问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-03
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多