专业的编程技术博客社区

网站首页 > 博客文章 正文

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

baijin 2025-05-22 09:09:54 博客文章 3 ℃ 0 评论

问题:

数据库为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

命令说明:

sudo /usr/local/bin/docker-compose  
#绝对路径执行docker-compose
-f /home/ubuntu/codimd/deployments/docker-compose.yml 
#指定绝对路径的docker-compose.yml文件执行
exec -T database pg_dump hackmd -U hackmd
#PostgreSQL数据的备份命令
/home/ubuntu/backup/codimd_`date +\%F`.sql
#以年月日的命名方式存在/home/ubuntu/backup 路径

测试生效,更改完成。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表