the input device is not a TTY,crontab定时任务无法备份docker容器的mysql

无法备份docker容器的mysql
数据库

背景

无法备份每日的docker容器的mysql 数据

-rw-r--r--    1 root     root         0K Jul 16 05:15 2023-07-16.sql
-rw-r--r--    1 root     root         162 Jul 16 05:09 backup.sh

backup.sh

#!/bin/bash
t=`date "+%Y-%m-%d"`
/usr/bin/docker  exec -it mysql /bin/mysqldump   -uroot -p12345 backup >  /data/backup/$t.sql

crontab

38 5 * * *  sh /data/backup/backup.sh  > /tmp/backup.log>&1

排查

日志
tail -f /var/log/cron

Jul 16 05:35:01 vm518398 crond[849]: (root) RELOAD (/var/spool/cron/root)
Jul 16 05:35:01 vm518398 CROND[435664]: (root) CMD (sh /data/backup/backup.sh  > /tmp/backup.log>&1)
Jul 16 05:35:01 vm518398 CROND[435662]: (root) CMDOUT (the input device is not a TTY)
Jul 16 05:35:04 vm518398 CROND[435662]: (root) CMDEND (sh /data/backup/backup.sh  > /tmp/backup.log>&1)

其中CMDOUT (the input device is not a TTY),这句引起的我的注意,一顿百度+google

原因

主要原因是 -t 是指分配一个伪终端,去掉-t就可以了

最终解决方案

backup.sh 去掉-t
加上scp到备份服务器


#!/bin/bash
t=`date "+%Y-%m-%d"`
/usr/bin/docker  exec -i mysql /bin/mysqldump   -uroot -p12345 backup >  /data/backup/$t.sql
scp -P 1022 /data/backup/$t.sql root@xxx.xxx.xxx.xxx:/data 

bigcong