Docker初识:the input device is not a TTY

前因:

        使用mysqldump对mysql 每天定时备份。

        备份执行文件mysql_dump.sh:

#!/bin/bash
docker exec -it mysql mysqldump -uroot -p123456 cx | gzip > /opt/mysql/backup/cx_`date +%Y%m%d`.sql.gz
send=`date '+%Y-%m-%d %H:%M:%S'`
if [ $? -ne 0 ];
then
    echo "$send 数据备份失败"
    exit -1
else
    echo "$send 数据备份成功!"
fi
 
find /opt/mysql/backup/ -mtime +7 -name 'cx_[1-9].sql' -exec rm -rf {} \;

        Linux定时任务:

#每周日凌晨2点
00 02 * * 7 sh /opt/mysql/backup/mysql_dump.sh > /opt/mysql/backup/mysql_dump.log 2>&1

        仔细看我们可以发现如果在为创建crontab的情况下,直接执行mysql_dump.sh,是可以正常执行的。创建crontab后,执行定时任务,会提示the input device is not a TTY!命名sh文件可以正常执行,并正常输出结果,但是为什么定时任务会无法执行呢?why?

后果:

the input device is not a TTY

溯源;

        作为一个小白的我,经过多方查找资料并测试发现,只要把-it去掉即可。

docker exec mysql mysqldump -uroot -p123456 cx | gzip > /opt/mysql/backup/cx_`date +%Y%m%d`.sql.gz

        那这是为什么呢?

        linux执行定时任务的时候没有终端设备,TTY一词源于Teletypes,或teletypewriters。其实出现该错误和我们的一个习惯有关,一般来说我们启动容器后要与容器进行交互操作,这是,就要加上"-it"这个参数,而在定时任务中,如果让脚本在后台运行,就没有可交互的终端,这就会引发如题所示错误,解决办法就是去掉“-it”这个参数。

承上:

Docker初识:mysql 使用mysqldump定时备份数据库

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值