docker-compose备份数据库命令,在crontab定时任务中不生效问题,解决方法

Posted the丶only

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker-compose备份数据库命令,在crontab定时任务中不生效问题,解决方法相关的知识,希望对你有一定的参考价值。

问题:

数据库为PostgreSQL。

由于数据库是用docker-compose运行,所以直接用docker-compose命令直接备份。测试终端直接运行备份没问题,将命令添加到crontab定时任务,却得到一个数据为0的空文件,命令失效。

终端备份执行命令,(终端执行备份没问题,数据完整)

sudo docker-compose exec database pg_dump hackmd -U hackmd > /home/ubuntu/backup/codimd_`date +%F`.sql

添加定时任务crontab -e为,(得到一个数据为0的空文件,命令失效)

0 2 * * * cd /home/ubuntu/codimd-2.4.1/deployments/ && sudo /usr/local/bin/docker-compose exec database pg_dump hackmd -U hackmd > /home/ubuntu/backup/codimd_`date +\\%F`.sql

原因:

将命令写入脚本,执行脚本没问题。将脚本加入定时任务,再次失效。所以跟脚本没关系。

1:由于docker-compose命令跟其他常规命令路径不一样,路径为 /usr/local/bin/docker-compose,常规命令路径为bin/bash等,所以crontab默认执行的为常规路径命令。需要使用绝对路径。

2:命令选项:-T:从而禁止分配伪终端,Disable pseudo-tty allocation. By default docker-compose exec allocates a TTY

解决后命令:

根据以上,重新更改crontab定时任务。

crontab -e
0 2 * * * sudo /usr/local/bin/docker-compose -f /home/ubuntu/codimd/deployments/docker-compose.yml exec -T database pg_dump hackmd -U hackmd > /home/ubuntu/backup/codimd_`date +\\%F`.sql

测试生效,更改完成。

以上是关于docker-compose备份数据库命令,在crontab定时任务中不生效问题,解决方法的主要内容,如果未能解决你的问题,请参考以下文章

confluence数据备份

nexus 数据库备份任务webhook 通知

nexus 数据库备份任务webhook 通知-另外一种方法

Mysql SQLyog 使用详解

crontab定时任务

Docker-compose常用命令