Skip to main content

container에서 the input device is not a TTY 로그 출력시 조치

container에 저장된 데이터를 export할때 편리하게 하려고 crontab에 걸어놨는데,

다음날 보니 export된 데이터의 사이즈가 0k.


$> ls -l
total 212
-rw-r--r-- 1 root root      0 Jan 23 01:02 back-2022-01-23.sql

혹시나 싶어서 mail로그를 보니. 이런게 똭..


$> cat /var/spool/mail/root
...
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20220123160541.test-machine>
Date: Mon, 24 Jan 2022 01:02:01 +0900 (KST)

the input device is not a TTY
...

 생각해보니 docker exec에서 input + terminal 옵션을 넣었는데 terminal때문에 꼬인듯.


$> cat /root/db_dump.sh
#!/bin/bash

NEW_DATE=$(date +%Y-%m-%d)
OLD_DATE=$(date +%Y-%m-%d -d '-30 days')

if [[ ! -d /home/backup/$NEW_DATE ]]
then
 mkdir -p /home/backup/$NEW_DATE
fi


#예전코드
$> docker exec -it postgres pg_dump -U test -d testdb > back-$NEW_DATE.sql

#변경코드
$> docker exec -i postgres pg_dump -U test -d testdb > back-$NEW_DATE.sql


음.. 잘됨.

$> ls -l
total 212
-rw-r--r-- 1 root root    102488 Jan 23 09:54 back-2022-01-23.sql