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

✍️Auth:运维笔记       Date:2022/03/19       Cat:Linux服务器MySQL       👁️:1,180 次浏览

问题:

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

测试生效,更改完成。

打赏作者

发表评论