cronjob问题中的docker exec和mysqldump
当我在cronjob中使用docker exec和mysqldump时,我发现了一些问题 我想在容器中备份我的数据库,并尝试了这个方法,效果很好cronjob问题中的docker exec和mysqldump,mysql,linux,docker,cron,Mysql,Linux,Docker,Cron,当我在cronjob中使用docker exec和mysqldump时,我发现了一些问题 我想在容器中备份我的数据库,并尝试了这个方法,效果很好 sudo docker exec -it --user root lemp_mariadb mysqldump -uroot -pxxxxxxx iot >/home/backup/backup_data.gz 但是当我在crontab中使用它时,我得到了没有任何内容的文件输出,文件大小是0字节 024***docker exec-it--用
sudo docker exec -it --user root lemp_mariadb mysqldump -uroot -pxxxxxxx iot >/home/backup/backup_data.gz
但是当我在crontab中使用它时,我得到了没有任何内容的文件输出,文件大小是0字节
024***docker exec-it--用户根lemp\u mariadb mysqldump-uroot-pxxxxxx iot>/home/backup/backup\u data.gz
我做错了什么?当您手动运行该命令时,您包括了
sudo
,但当您在crontab中运行该命令时,您不是。除非您将其安装为root
crontab,否则它将失败
请参阅此处有关如何将Docker设置为以非root用户身份运行的说明
此外,您正在使用-it
选项,这需要一个交互终端,当从crontab运行时,该终端不可用。您需要删除这些参数
要获得有关失败的更多详细信息,可以使用2>/path/To/file
将crontab命令中的错误重定向到一个文件以供检查
综上所述,您的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
杰森·皮科克的回答是对的 但我更愿意将dump命令移动到另一个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
然后在crontab中:
0 24 * * * /home/backup/backup.sh
更多的信息可能会很有帮助。我假设crontab是以root用户身份运行的?这看起来像是以下内容的重复:正在写入备份的位置,容器是否有权访问您尝试写入文件的位置,以及是否有正确的权限以用户/容器身份写入?很可能没有写入能力,因此您收到一个失败或您的命令不正确,导致0写入或进程死亡。(过程死亡可能性最小)
0 24 * * * /home/backup/backup.sh