はじめに
cronでdockerコンテナ内のシェルを動かし、結果をリダイレクトしようとした際、
“` the input device is not a TTY “`
とエラーが出て、期待通りに動かなかった。
原因
/usr/bin/docker exec -it redash_server_1 ./manage.py users list > /tmp/hoge
cronで動かすのに
“` docker exec -it “`
-it のtが邪魔していた。
dockerのコンテナ内に入るとき、もしくはコンテナ内のシェルを動かすとき、docker exec -itがもはや決まり文句のように打っていたが、
改めてオプションを見直して見ると、-t はTTYデバイスに割り当てるオプションらしい。
https://docs.docker.com/engine/reference/commandline/exec/#usage
--tty , -t Allocate a pseudo-TTY
これがcronで実行するときには不要であり、これがあることによりエラーになる。
対応策
tオプションを削る
/usr/bin/docker exec -i redash_server_1 ./manage.py users list > /tmp/hoge
これで問題なくcronで実行される