如何定時打開和關閉 GCP VM Nginx WEB 達到省錢目的
建立一個會自動開機和關閉虛擬機器的排程
值得注意的事項:
- 主機時間都是 UTC 時間,設定的時候,要記得處理這邊,例如台灣時區是+8,所以設定時間的時候要-8
1.首先設定一個 Compute Engine 的 「執行個體排程」如圖所示
2.建立一個新的執行個體排程
設定在每天18:00到23:00最忙碌的時候多開一台主機
3.將要執行的 VM 個體加入到此排程中
記得建立好排程後,要把適用這個規則的 VM 個體都加入,GCP 的排程才會去處理 VM 的開關
4.執行排程的權限設定
如果你之前沒做過權限設定,那肯定會遇到權限不足的錯誤訊息,這時候要來到 IAM 與管理 -> 身分與存取權管理,並且先勾選「包含 Google 提供的角色授權」,然後選擇「授予存取權」
然後主體要選擇你自己的 compute-system.iam 指派角色則是選擇 Compute 執行個體管理員(v1),如圖所示
建立 Ubuntu or Debian 的 Shell Script 定時執行開關機
1.建立自動開關設定的 Script
#!/bin/bash SOURCE_CONF="/path/to/a.conf" TARGET_CONF="/path/to/nginx/nginx.conf" # 使用 sudo 執行需要 root 權限的命令 sudo cp "$SOURCE_CONF" "$TARGET_CONF" sudo nginx -s reload
2.可以使用 crontab
命令來檢查和管理定時任務(cron jobs)
sudo crontab -e
加入執行時間、程式碼等設定
# 分 鐘 小時 日期 月份 星期 命令 0 23 * * * /path/to/update_nginx_conf.sh
這樣就可以利用 root 權限運行 Script
其中:
- 分鐘:分鐘(0-59)
- 小時:小時(0-23,採24小時制)
- 日期:一個月中的某天(1-31)
- 月份:月份(1-12)
- 星期:星期幾(0-7,其中0和7都代表星期日)
- 命令:要執行的命令或腳本的絕對路徑
例如,如果您希望每天凌晨 3 點執行一個名為 script.sh
的腳本,您應該這樣寫:
檢查
檢查 crontab
列表:輸入 crontab -l
來確認您的任務已被添加到 crontab
列表中。
其他方法
at 指令
例如要讓指令碼在明天的 10:00執行,可以執行下面的指令
at 10:00 AM tomorrow /path/to/script.sh
systemd (System and Service Manager)
- 創建一個 systemd 定時任務檔案。
- 在定時任務檔案中指定要執行的命令或腳本以及執行時間。
- 啟用定時任務。
例如:每一分鐘都要執行一次 script.sh
[Unit] Description=My Script [Timer] OnCalendar=*-*-* *:* * [Service] ExecStart=/path/to/script.sh
錯誤處理
如果有遇到無法執行權限的話,可以參考下面的文章解決權限問題
結語
這樣設定完成後,GCP自己就會在晚上11點關機、晚上6點開機,而我的腳本則是在晚上11:00 關閉 Nginx 的 upstream,在18:15開啟 upstream server
近期留言