◾️ 개요
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에서 정상적으로 실행될 것입니다.