# sudo docker exec -it /do/somthing
cron.d 에 docker exec 명령문을 수행하도록 추가하는 경우 습관적으로 -it 플래그를 붙이는 경우가 있습니다. -it 플래그를 붙여 실행하면 보통 도커 컨테이너에 쉘(shell)로 접속해 여러 가지 명령어를 직접 실행하기에 좋은데요.
하지만 cron 서비스가 위 명령어를 실행하는 경우 cron 은 별도의 콘솔 즉 TTY를 접속하지 않기 때문에 -it 플래그를 붙인 명령문은 제대로 실행하지 않고 종료하게 됩니다.
따라서 해결 방법은 간단히 -it 를 빼고 명령문을 넣어주면 됩니다. (이렇게 간단한 걸 모르고 며칠을 고민하다니..)
# docker exec /do/somthing
추가로 docker exec 에 대한 도움말을 보면 아래와 같습니다. 특히 -t 플래그의 경우 pseudo-TTY 를 할당한다고 되어 있네요. cron 서비스가 TTY에 연결되지 않기 때문에 문제가 되는 거였습니다.
$ docker exec --help
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Execute a command in a running container
Aliases:
docker container exec, docker exec
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
--env-file list Read in a file of environment variables
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: "<name|uid>[:<group|gid>]")
-w, --workdir string Working directory inside the container
습관적으로 주던 명령문의 플래그는 의미를 잘 알고 있어야 하겠습니다. 이것 때문에 며칠 동안 cron 으로 걸어둔 작업이 정상작동하지 않아 애먹었네요. ㅜㅜ
[참고]
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.