Profile picture

[Docker] the input device is not a TTY

JaehyoJJAng2024년 01월 25일

◾️ 개요

crontab에 아래 스크립트를 등록하였음.

*/5 * * * *  bash /home/master/rconUserAlarm/set-rcon-players.sh
# set-rcon-players.sh
#!/usr/bin/bash

docker exec -it palworld-server rcon-cli ShowPlayers > /home/master/rconUserAlarm/players/players.txt

그러나 무슨 이유에선지 crontab이 정상적으로 실행되지 않았음.

원인 파악을 위해 crontab에 표준 출력 & 에러를 파일로 생성하도록 리다이렉션 추가
(테스트를 위해 */1[1분]로 크론 시간 수정)

*/1 * * * *  bash /home/master/rconUserAlarm/set-rcon-players.sh > ~/cron_log 2>&1
cat ~/cron_log
the input device is not a TTY

위와 같은 에러 로그 발생🧐


◾️ 해결

이러한 에러가 발생하는 이유는 crontab에서 명령을 실행할 때 해당 명령을 interactive 하게 실행하려고 시도하기 때문입니다. 그러나 crontab은 일반적으로 사용자 입력이 없는 환경에서 명령을 실행하기 때문에 이러한 에러가 발생합니다.

이 경우, docker exec 명령어가 TTY(터미널)을 필요로 하기 때문에 발생하는 것으로 보입니다. 이를 해결하기 위해서는 -t 옵션을 사용하여 명령을 실행할 때 TTY를 할당하지 않도록 설정해야 합니다.

따라서 crontab에 등록한 명령을 다음과 같이 수정해야 합니다:

docker exec -i palworld-server rcon-cli ShowPlayers > /home/master/rconUserAlarm/players/players.txt

여기서 -i 옵션은 stdin을 열어서 컨테이너로 입력을 전달하지만, -t 옵션은 TTY를 할당하는 것이므로 -t 옵션을 제거하고 -i 옵션을 사용하여 수정하였습니다.

이렇게 수정하면 TTY 에러가 발생하지 않고, crontab에서 정상적으로 실행될 것입니다.


Loading script...