#29 GCP VM インスタンス で Python3 の venv構築とsystemd,cron利用

icon incmplt - Info Circus が 2025/11/30 10:32 に投稿

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

 添付ファイル     - [0]


 コメント追加