解决crontab无法执行docker exec命令问题

解决crontab无法执行docker exec命令问题

1. 问题现象

我想使用docker exec对命令对docker中的 mysql数据库进行备份,然后当我使用crontab添加备份命令

复制代码
*/2 * * * * docker exec -i mysql /bin/bash -c 'mysqldump -uroot -pa123456  --port=3306  testdb' > /home/backup/test_$(date +%Y%m%d%H%M%S).sql

每两分钟执行一次,crontab中一直无法进行备份

单独执行

复制代码
 docker exec -i mysql /bin/bash -c 'mysqldump -uroot -pa123456  --port=3306  testdb' > /home/backup/test_$(date +%Y%m%d%H%M%S).sql

备份命令,备份没有问题。

crontab中不能有-it这种存在,-it会拉起终端,所以去掉之后还是无法执行。最终几经尝试后,终于解决了

2. 解决方法

为什么crontab无法执行docker exec命令呢,因为crontab中无法识别到docker命令,网上搜到说这种方法可以解决,就是直接使用/usr/bin/docker 指定docker,单独执行也是没有问题,但是放crontab依然不行。大家可以自行试试。

复制代码
*/2 * * * * /usr/bin/docker exec mysql /bin/bash -c 'mysqldump -uroot -pa123456  --port=3306  testdb' > /home/backup/test_$(date +%Y%m%d%H%M%S).sql

这里我才用新建一个shell脚本的方式解决了此问题

首先新建一个backupmysql.sh的脚本

然后脚本里首先加载系统环境变量source /etc/profile,然后再执行我的脚本,这样备份命令就能被crontab正常执行了。

但是我又想了,我采用了

复制代码
*/2 * * * * source /etc/profile&&/usr/bin/docker exec mysql /bin/bash -c 'mysqldump -uroot -pa123456  --port=3306  testdb' > /home/backup/test_$(date +%Y%m%d%H%M%S).sql

依然不行,非常奇怪

3. 最终方案

最后采用独立脚本的方式,脚本里首先加载系统变量,这样是能正常定时任务执行docker命令的。

最后贴出来我的备份docker中mysql脚本

复制代码
#!/bin/bash
# auth Eric
source  /etc/profile
# 设置备份目录和文件名
backup_directory="/app/backup"
#测试名字用%Y%m%d%H%M%S正式可以用%Y%m%d
backup_filename="test_$(date +%Y%m%d).sql"

# 设置MySQL连接参数
mysql_host="localhost"
mysql_user="root"
mysql_port="3306"
mysql_password="a12345"
mysql_database="testdb"

# 创建备份目录(如果不存在)
mkdir -p "$backup_directory"

# 执行备份命令
docker exec  mysql /bin/bash -c 'mysqldump -u$mysql_user -p$mysql_password --port=$mysql_port $mysql_database' > $backup_directory/$backup_filename

#删除7天前数据
find $backup_directory -name "test_*.sql" -mtime +7 -exec rm {} \;

# 检查备份是否成功
if [ $? -eq 0 ]; then
  echo "MySQL数据库备份成功:$backup_directory/$backup_filename"
else
  echo "MySQL数据库备份失败"
fi

4. 更多资料

Linux cron定时任务常用方法

Docker容器中的mysql自动备份脚本

相关推荐
消失的旧时光-194326 分钟前
Linux 入门核心命令清单(工程版)
linux·运维·服务器
艾莉丝努力练剑34 分钟前
【Linux:文件】Ext系列文件系统(初阶)
大数据·linux·运维·服务器·c++·人工智能·算法
小天源37 分钟前
Cacti在Debian/Ubuntu中安装及其使用
运维·ubuntu·debian·cacti
说实话起个名字真难啊40 分钟前
用docker来安装openclaw
docker·ai·容器
Trouvaille ~1 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
恬静的小魔龙1 小时前
【群晖Nas】群晖Nas中实现SVN Server功能、Docker/ContainerManager等
docker·svn·容器
芷栀夏1 小时前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann
全栈工程师修炼指南1 小时前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
Zfox_2 小时前
CANN Catlass 算子模板库深度解析:高性能 GEMM 融合计算、Cube Unit Tiling 机制与编程范式实践
docker·云原生·容器·eureka
威迪斯特2 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver