GCP VM インスタンスの Ubuntu 24.04 LTS で、 systemd や cron から安定して実行できる python3 + pip3 の実行環境を構築する手順です。
- Ubuntu 24.04 LTS
- ユーザーは gcpuser
必要パッケージのインストール
Ubuntu 24.04 LTS は、標準で python 3.12 がインストールされていますが更新の確認を実行します。
sudo apt update
sudo apt install -y python3 python3-venv python3-pip
venv の作成
汎用的に呼び出せるように venv の環境を構築します。
sudo mkdir -p /opt/pyenvs/workenv
sudo python3 -m venv /opt/pyenvs/workenv
sudo chown -R gcpuser:gcpuser /opt/pyenvs/workenv
venv へ必要パッケージのインストールします。
cd /opt/pyenvs/workenv
source /opt/pyenvs/workenv/bin/activate
pip install --upgrade pip
pip install requests psutil # 必要なライブラリを適宜
pip install google-cloud-monitoring
deactivate
実行環境とスクリプトの配置
ここでは /opt/sbin に、システム管理用のスクリプト配置と仮定します。
sudo mkdir -p /opt/sbin
sudo cp service_health_prov.py /opt/sbin/service_health_prov.py
sudo chmod 755 /opt/sbin/service_health_prov.py
systemd から実行する設定
systemd はデフォルトでログインシェルを使用しないため、 venvのpythonを直接指定 します。
Unit ファイルの作成
/etc/systemd/system/service-health.service
[Unit]
Description=Service Health Provider
After=network.target
[Service]
Type=simple
User=gcpuser
ExecStart=/opt/pyenvs/workenv/bin/python /opt/sbin/service_health_prov.py
Restart=always
[Install]
WantedBy=multi-user.target
systemd の有効化
sudo systemctl daemon-reload
sudo systemctl enable --now service-health.service
cron から実行する設定
cron もPATHが制限されるため、 venv の python を直接指定します。
*/5 * * * * /opt/pyenvs/service_health/bin/python /opt/sbin/service_health_prov.py >> /var/log/service_health.log 2>&1
実行するスクリプトで注意する点(service_health_prov.py)
- venv 前提のため、#!/usr/bin/env python3 でもよいが systemd/cron は 指定した python を使うため特別な shebang は不要
- ログは標準出力に出すと systemd journal に記録される cron 実行時はリダイレクトすること
venv の更新
venv のパッケージなどを更新する場合には、以下の作業を実施します。
source /opt/pyenvs/service_health/bin/activate
pip install -U some-package
deactivate
sudo systemctl restart service-health.service
まとめ
- Python は Ubuntu 標準の python3 を使用
- pip 実行環境は venv に統一
- systemd / cron からは 絶対パスで venv の python を指定
- スクリプトは /opt/sbin に配置
- venv の場所は /opt/pyenvs/workenv