Docker 外部 Cron 遇到 the input device is not a TTY 解法

現在於 Linux 程式很多都包 Docker,而需要定期跑得程式,可以跑在 Docker 裡面(需要特別做),或者就是在外部 docker exec 執行

但是在 docker exec + crontab 的時候,就會遇到「the input device is not a TTY」 的錯誤,要怎麼解決呢?

閱讀全文〈Docker 外部 Cron 遇到 the input device is not a TTY 解法〉

Docker 的 Crontab 設定作法

Docker 核心概念是 Microservice,所以應該盡量不要進去機器做 Cron 的設定,要再外部控制 Cron 的執行才是。

Crontab 主要是希望在環境裡面跑那隻程式,所以只要由外部呼叫程式執行,程式都在 Docker 的環境裡面跑,並不是外部的環境,就不會有任何影響。

所以從 Docker 教學第一行 Hello 就有示範怎麼玩了~

  • docker exec CONTAINER-NAME exec-script-name
  • docker exec -t CONTAINER-NAME /full-path/exec-script-name
  • docker exec -t CONTAINER-NAME exec-script-name
  • 註1:若遇到 Bash 要多個命令使用 ; 分別執行的,可以使用 bash -c 的命令
  • 註2:千萬不要 -it,進入 interactive 就會有 tty 的錯誤出現

閱讀全文〈Docker 的 Crontab 設定作法〉

Linux 如何於 Crontab 執行 Python Virtualenv 環境

Python 都會使用 virtualenv 來開發,Deploy 當然也希望可以建造一個乾淨的 virtualenv 的環境來搬移。

不過 Python 的 venv 執行的參數作法如下:

  1. cd venv
  2. . venv/bin/activate # 進入環境,問題出在這個階段,進不去
  3. pip install -r requirements.txt # 安裝所需套件

閱讀全文〈Linux 如何於 Crontab 執行 Python Virtualenv 環境〉

Linux user crontab 檔案存放位置

各種類的 Linux 都一樣, 使用者 用 crontab -e 編輯排程後, 總會把這些資料紀錄在某個地方.

平常都不需要在意, 但是如果是搬移 NIS 且 順便有修改帳號的 id / group id 等等, 就會爆炸, 於是花點時間翻了一下~

註: 此為 Ubuntu / Debian Linux 的存放位置.

閱讀全文〈Linux user crontab 檔案存放位置〉