検索

cronからdocker exec -itでコンテナ上のコマンドが動かなかった件

なろうとかカクヨムとかのWeb小説をepubに変換してくれるnarou.rbっていうソフトのdocker版を運用しているのだが、小説の更新を毎回手動でコマンド打って確認するのも面倒くさいのでcronにやらせるよう、corn.dailyに記述してたんだけど全く動かなかった。毎日確認してほしいので以下のようなスクリプトを”/etc/cron.daily/”においていた。

#narourb更新
 docker exec -it narourb ash -c "narou u" > narourb-NovelUpdate.log
 date >> /var/log/narourb-NovelUpdate.log
Code language: PHP (php)

とりあえずリダイレクトで簡易的なログ代わりに吐かせてみたところdateの出力しかされてなかった。

解決方法

とりあえず全くわからんかったのでstackoverflowの強そうなエンジニアたちの過去のQAを参考にしたところ、itオプションがだめらしい。なのでitオプションを外したら動くはず。(未検証)

#narourb更新
 docker exec narourb ash -c "narou u" > narourb-NovelUpdate.log
 date >> /var/log/narourb-NovelUpdate.log
Code language: PHP (php)

まぁ多分cronはそもそも端末を使用しないから云々的な理由だと思う

参考文献

https://stackoverflow.com/questions/37089033/docker-exec-is-not-working-in-cron