【问题标题】:docker exec and mysqldump in cronjob problemcronjob 问题中的 docker exec 和 mysqldump
【发布时间】:2021-03-30 15:12:37
【问题描述】:

我在 cronjob 中使用 docker exec 和 mysqldump 时发现了一些问题

我想在容器中备份我的数据库并尝试了这个,效果很好

sudo docker exec -it --user root lemp_mariadb mysqldump -uroot -pxxxxxxx iot  >/home/backup/backup_data.gz

但是当我在 crontab 中使用它时,我得到的文件输出没有任何内容,文件大小为 0 字节

0 24 * * * docker exec -it --user root lemp_mariadb mysqldump -uroot -pxxxxxxx iot >/home/backup/backup_data.gz

我做错了什么?

【问题讨论】:

  • 更多信息可能真的很有帮助。我假设 crontab 以 root 身份运行?
  • 备份在哪里写入,容器是否有权访问您尝试写入文件的位置以及作为用户/容器写入的正确权限?很可能没有写入能力,因此您收到失败或您的命令不正确,导致写入为 0 或进程终止。 (进程死亡的可能性最小)

标签: mysql linux docker cron


【解决方案1】:

当你手动运行命令时,你包括sudo,但是当你在 crontab 中运行命令时,你不是。除非您将其安装为 root crontab,否则它将失败。

请参阅此处的Manager Docker as a non-root user 说明,了解如何将 Docker 设置为以非 root 用户身份运行。

此外,您正在使用-it 选项,该选项期望从 crontab 运行时不可用的交互式终端。您需要删除这些参数。

要获取有关失败的更多详细信息,您可以将错误从 crontab 命令重定向到文件以使用2>/path/to/file 进行检查。

将它们放在一起,您的 crontab 条目将如下所示:

0 24 * * * docker exec --user root lemp_mariadb mysqldump -uroot -pxxxxxxx iot  >/home/backup/backup_data.gz 2>/var/tmp/docker_msqldump_errors.log

【讨论】:

    【解决方案2】:

    Jason Peacock 的答案是对的 但我更愿意将转储命令移动到另一个 shell 脚本中:

    vim /home/backup/backup.sh
    

    在backup.sh里面:

    #!/bin/bash
    echo 'Backing up db'
    docker exec --user root lemp_mariadb /usr/bin/mysqldump -uroot -pxxxxxxx iot | gzip -9  > /home/backup/backup_data.sql.gz
    
    chmod a+x /home/backup/backup.sh
    

    然后在你的 crontab 中:

    0 24 * * * /home/backup/backup.sh
    

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      相关资源
      最近更新 更多