ホーム チュートリアル カテゴリ Skills サイトについて
ZH EN JA KO
セキュリティ運用

PM2とSystemdによるOpenClawプロセス管理チュートリアル

· 15 分で読了

はじめに

ターミナルで直接 openclaw up を実行する方法には致命的な問題があります。ターミナルを閉じたり SSH 接続が切れたりすると、サービスが停止してしまいます。本記事では、PM2 と Systemd という2つの本番レベルのプロセス管理ソリューションを紹介し、OpenClaw をサーバー上で安定稼働させる方法をご説明します。

一、PM2 ソリューション(推奨)

PM2 は Node.js エコシステムで最も人気のあるプロセスマネージャーで、OpenClaw と自然に互換性があります。

1.1 PM2 のインストール

# PM2 をグローバルインストール
npm install -g pm2

# インストールの確認
pm2 --version

1.2 OpenClaw のクイックスタート

# PM2 で OpenClaw を起動
pm2 start openclaw -- up

# 実行状態の確認
pm2 status

出力例:

┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┐
│ id  │ name     │ namespace   │ mode    │ status  │ cpu      │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┤
│ 0   │ openclaw │ default     │ fork    │ online  │ 0.3%     │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┘

1.3 Ecosystem 設定ファイルの使用

本番環境では、PM2 の ecosystem 設定ファイルを使用した詳細な管理をお勧めします:

# 設定ファイルの作成
nano ~/openclaw-ecosystem.config.js
// ~/openclaw-ecosystem.config.js
module.exports = {
  apps: [
    {
      name: "openclaw",
      script: "openclaw",
      args: "up",
      cwd: process.env.HOME,

      // 再起動ポリシー
      autorestart: true,
      max_restarts: 10,
      min_uptime: "30s",
      restart_delay: 5000,

      // リソース制限
      max_memory_restart: "512M",

      // 環境変数
      env: {
        NODE_ENV: "production",
        NODE_OPTIONS: "--max-old-space-size=512"
      },

      // ログ設定
      log_file: "/var/log/openclaw/combined.log",
      out_file: "/var/log/openclaw/out.log",
      error_file: "/var/log/openclaw/error.log",
      log_date_format: "YYYY-MM-DD HH:mm:ss Z",
      merge_logs: true,

      // ファイル変更の監視による自動再起動(開発環境用)
      watch: false,

      // グレースフルシャットダウン
      kill_timeout: 10000,
      listen_timeout: 15000
    }
  ]
};
# ログディレクトリの作成
sudo mkdir -p /var/log/openclaw
sudo chown $USER:$USER /var/log/openclaw

# ecosystem ファイルで起動
pm2 start ~/openclaw-ecosystem.config.js

# ステータスの確認
pm2 status

1.4 OS 起動時の自動起動設定

PM2 の最も強力な機能の一つです。1つのコマンドで自動起動を実現できます:

# 自動起動スクリプトの生成(システムに応じて systemd/upstart/launchd を自動選択)
pm2 startup

# sudo で実行する必要があるコマンドが出力されます。それをコピーして実行してください
# 例:
# sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u your_user --hp /home/your_user

# 現在のプロセスリストを保存
pm2 save

重要:PM2 が管理するプロセスを変更(追加、削除、再起動)するたびに、pm2 save を実行して保存済みプロセスリストを更新する必要があります。

1.5 よく使う PM2 管理コマンド

コマンド 機能
pm2 status 全プロセスの状態を表示
pm2 logs openclaw リアルタイムログの表示
pm2 logs openclaw --lines 100 直近100行のログを表示
pm2 restart openclaw サービスの再起動
pm2 stop openclaw サービスの停止
pm2 delete openclaw プロセスの削除
pm2 reload openclaw ゼロダウンタイムリロード
pm2 monit リアルタイム監視パネルを起動
pm2 describe openclaw プロセスの詳細情報を表示
pm2 env 0 プロセスの環境変数を表示

1.6 PM2 リアルタイム監視パネル

# インタラクティブ監視パネルの起動
pm2 monit

このパネルは以下の情報をリアルタイムで表示します:

  • CPU とメモリの使用率
  • リアルタイムのログスクロール
  • プロセスメタデータ(PID、稼働時間、再起動回数)
  • カスタムメトリクス

1.7 PM2 ログ管理

長期間の稼働後、ログファイルは非常に大きくなります。pm2-logrotate モジュールで自動ローテーションを行います:

# ログローテーションモジュールのインストール
pm2 install pm2-logrotate

# ローテーションパラメータの設定
pm2 set pm2-logrotate:max_size 50M       # 1ファイル最大 50MB
pm2 set pm2-logrotate:retain 7           # 直近7ファイルを保持
pm2 set pm2-logrotate:compress true      # 古いログを圧縮
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'  # 毎日ローテーション

# 現在のログを手動でクリア
pm2 flush openclaw

1.8 PM2 での OpenClaw アップグレード

OpenClaw のバージョンをアップグレードする場合:

# 1. OpenClaw のアップグレード
npm install -g openclaw@latest

# 2. PM2 のプロセスを再起動
pm2 restart openclaw

# 3. バージョンとステータスの確認
pm2 describe openclaw
curl -s http://localhost:18789/health | jq .version

二、Systemd ソリューション

Linux ネイティブのプロセス管理方式を好む場合、Systemd が最適な選択肢です。

2.1 Systemd サービスファイルの作成

# openclaw のインストールパスを確認
which openclaw
# 通常は /usr/bin/openclaw または /usr/local/bin/openclaw

# サービスファイルの作成
sudo nano /etc/systemd/system/openclaw.service
[Unit]
Description=OpenClaw AI Assistant Platform
Documentation=https://openclaw.com
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw

# 起動コマンド
ExecStart=/usr/local/bin/openclaw up
ExecStop=/bin/kill -SIGTERM $MAINPID
ExecReload=/bin/kill -SIGUSR2 $MAINPID

# 環境変数
Environment=NODE_ENV=production
Environment=NODE_OPTIONS=--max-old-space-size=512

# 再起動ポリシー
Restart=always
RestartSec=10
StartLimitBurst=5
StartLimitIntervalSec=60

# リソース制限
MemoryMax=1G
CPUQuota=80%

# セキュリティ強化
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/openclaw/.config/openclaw
ReadWritePaths=/home/openclaw/.openclaw
PrivateTmp=true

# ログ
StandardOutput=journal
StandardError=journal
SyslogIdentifier=openclaw

[Install]
WantedBy=multi-user.target

2.2 専用ユーザーの作成(推奨)

# システムユーザーの作成
sudo useradd -r -m -s /bin/bash openclaw

# そのユーザーに切り替えて初期設定を完了
sudo -u openclaw bash -c "openclaw onboard"

2.3 サービスの有効化と管理

# systemd 設定のリロード
sudo systemctl daemon-reload

# 自動起動の有効化
sudo systemctl enable openclaw

# サービスの起動
sudo systemctl start openclaw

# ステータスの確認
sudo systemctl status openclaw

2.4 よく使う Systemd 管理コマンド

コマンド 機能
systemctl start openclaw サービスの起動
systemctl stop openclaw サービスの停止
systemctl restart openclaw サービスの再起動
systemctl status openclaw ステータスの確認
systemctl enable openclaw 自動起動の有効化
systemctl disable openclaw 自動起動の無効化
journalctl -u openclaw -f リアルタイムログの表示
journalctl -u openclaw --since "1 hour ago" 直近1時間のログを表示
journalctl -u openclaw -p err エラーログのみ表示

2.5 Systemd ログ管理

Systemd は journald を使用してログを管理します。以下の方法でログサイズを制御できます:

# journald 設定の編集
sudo nano /etc/systemd/journald.conf

# 最大ログ容量の設定
# SystemMaxUse=500M
# SystemMaxFileSize=50M

# journald の再起動
sudo systemctl restart systemd-journald

# 古いログの手動クリーンアップ(直近3日間を保持)
sudo journalctl --vacuum-time=3d

# 古いログの手動クリーンアップ(合計サイズを 200MB に制限)
sudo journalctl --vacuum-size=200M

三、PM2 vs Systemd の比較

特性 PM2 Systemd
インストール難易度 簡単(npm install) インストール不要(システム標準)
設定の難易度 中程度 中程度
Node.js 連携 ネイティブサポート 手動設定が必要
監視パネル 内蔵(pm2 monit) サードパーティツールが必要
ログ管理 プラグインが必要 journald がネイティブサポート
セキュリティ強化 限定的 豊富なサンドボックスオプション
リソース制限 メモリ制限 CPU/メモリ/IO の包括的な制限
クラスターモード サポート 直接サポートなし
クロスプラットフォーム Windows/Mac/Linux Linux のみ
適用シーン 開発/小規模本番 本番環境

四、クラッシュ自動復旧テスト

どちらのソリューションを使用する場合でも、クラッシュ復旧能力のテストをお勧めします:

# OpenClaw の PID を取得
pgrep -f "openclaw up"

# プロセスクラッシュのシミュレーション
kill -9 $(pgrep -f "openclaw up")

# 数秒待ってから自動再起動を確認
sleep 15

# PM2 ソリューションの場合
pm2 status

# Systemd ソリューションの場合
systemctl status openclaw

五、ベストプラクティス

  1. 個人プロジェクトまたは開発環境:PM2 を使用。設定が簡単で機能が豊富です
  2. 本番サーバー:Systemd を使用。セキュリティ強化オプションが充実しています
  3. 両方の組み合わせ:Systemd で PM2 自体を管理し、双方の利点を活かします
  4. ログローテーションの設定を忘れずに:ディスクがログファイルで埋まるのを防ぎます
  5. 適切な再起動制限の設定:無限ループ再起動によるリソース消費を防ぎます
  6. 監視と併用:本サイトの「OpenClawサービス監視とアラート設定チュートリアル」を参考に監視を構築してください

プロセス管理を設定すれば、OpenClaw サービスはエンタープライズレベルの稼働安定性を備え、予期せぬ中断を心配する必要がなくなります。

OpenClawは無料のオープンソースAIアシスタント。WhatsApp、Telegram、Discordなど多数のプラットフォームに対応