GCE 使用 Container-Optimized OS (COS) 增加 crontab 服務,定時執行任務
前言
Container-Optimized OS (下稱COS) 是 Google 推出的容器服務
專門給 Google Compute Engine(GCE) 使用
可以很快速、輕量的直接使用特定服務,如 MySQL, PostgreSQL, nginx, redis …等
由於是 Google 高度客制的 OS,所以少了許多 Linux 原生該有的指令
為了確保其穩定性,連 apt-get 都移除了!所以無法額外安裝套件
對於 debug 或一些查問題的指令,Google 提供 toolbox 可以安裝套件來使用
如toolbox apt-get crontab
安裝好後,要執行也是得透過 toolbox,如toolbox crontab -l
會透過 container 封裝執行
一般查問題的指令還不影響,但像crontab
這種排程作業,就會無法運作!
像這種情況,Google 提供的作法是透過 docker container 自行封裝所需功能後
由 docker 啟動、使用!
作法
COS可以直接使用 dockerHub 上的 image
可以先去搜尋看看想要的功能是否已經有現成的,可以省下自行封裝的時間!
以crontab
為例,就在 dockerHub 找到帶 UI 的 crontab
叫 crontab-ui
連自己下指令都免了
啟動後,透過 WEB UI 設定就行!
零、使用crontab-ui
注意事項
在 GCE 上使用要注意的是,他的時區是UTC +00:00
所以在設定時,要扣掉 8 小時,才會是台灣的執行時間
如:
凌晨0:00執行,就要設定 16:00。在cron上即0 16 * * *
凌晨1點半執行,就是設定 17:30。在cron上即30 17 * * *
一、到 GCE 管理頁面,透過 SSH 連入
至 GCE 管理頁面,點擊 SSH,透過 WEB UI 連線進去
二、建立外部目錄供 container 保存資料
由於 COS 對於目錄有一些權限限制
為避免受這些限制影響,或自己對 Linux 權限操作不算熟悉的話
建議就直接在user目錄放置檔案,最簡單無腦
即/home/{您的username}/crontab-ui
SSH WEB UI 連線進去時,預設就是在/home/{您的username}/
底下
故直接輸入mkdir crontab-ui
建立目錄
三、執行指令
docker run --mount type=bind,source=/home/{您的username}/crontab-ui/,target=/crontab-ui/crontabs/ -d --restart always -e BASIC_AUTH_USER=帳號 -e BASIC_AUTH_PWD=密碼 -p 80:8000 alseambusher/crontab-ui
參數解析
根據 docker 官方文件
可以加參數自動重新啟動
參數 | 意思 |
---|---|
-d |
背景執行 |
--restart always |
自動重啟服務 |
-p 80:8000 |
port映射,VM: Container |
--mount type=bind,source=/home/{您的username}/crontab-ui/,target=/crontab-ui/crontabs/ |
目錄映射,將檔案保存到 VM 上 |
-e BASIC_AUTH_USER=帳號 -e BASIC_AUTH_PWD=密碼 |
crontab-ui的自定義參數,使用基本的權限管理功能 |
若想要走https
,crontab-ui 亦有提供參數可掛載憑證!
可以參閱crontab-ui readme獲得更詳細的說明