まだ OpenClaw をインストールしていませんか?
パソコンへの影響が心配?ClawTank なら60秒でクラウドデプロイ、ファイルへのリスクゼロ。
OpenClaw を systemd サービスとして実行:常時稼働 Linux セットアップ
ターミナルで OpenClaw をインタラクティブに実行するのは開発中には良いですが、本格的なデプロイメントでは、起動時に自動起動し、障害時に再起動し、構造化されたログを生成するバックグラウンドサービスとして実行したいものです。モダン Linux では、systemd がこれらすべてを行う標準的なプロセススーパーバイザーです。
なぜ OpenClaw に systemd なのか?
systemd は事実上すべてのモダン Linux ディストリビューションの init システムです[1]。これを使用すると以下が得られます:
- 自動起動 — 手動介入なしに起動時に自動開始
- 自動再起動 — プロセスがクラッシュした際の自動再起動
- 構造化ログ — 組み込みローテーション付きジャーナル経由
- リソース制御 — cgroups によるメモリ制限、CPU クォータ
- 依存関係の順序付け — ネットワークが利用可能になった後に OpenClaw を起動
- セキュリティサンドボックス — ファイルシステムとネットワークアクセスを制限
tmux で openclaw start & を実行したり、cron の @reboot エントリを使うのと比較して、systemd はアドホックなアプローチでは実現できない信頼性の保証を提供します。
クイックセットアップ:組み込みインストーラー
openclaw onboard --install-daemon
これは root か通常ユーザーかを検出し、適切なサービスファイルを作成し、起動時に有効にし、すぐに開始します。多くのユーザーにはこれだけで十分です。
ユーザーサービスとシステムサービス
システムサービス は /etc/systemd/system/ に置かれ、ログイン状態に関係なく起動時に開始されます。ヘッドレスサーバーや共有マシンにはこちらを選択してください。
ユーザーサービス は ~/.config/systemd/user/ に置かれ、ユーザーがログインした時に開始されます。個人のワークステーションや root アクセスがない場合にはこちらを選択してください。
手動システムサービスファイル
まず、パスを確認します:
which openclaw
# /usr/bin/openclaw or ~/.nvm/versions/node/v22.x.x/bin/openclaw
ユニットファイルを作成します:
sudo tee /etc/systemd/system/openclaw.service > /dev/null << 'EOF'
[Unit]
Description=OpenClaw AI Agent Runtime
Documentation=https://docs.openclaw.dev
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw
ExecStart=/usr/bin/openclaw start --daemon
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
StartLimitIntervalSec=300
StartLimitBurst=5
Environment=NODE_ENV=production
Environment=HOME=/home/openclaw
StandardOutput=journal
StandardError=journal
SyslogIdentifier=openclaw
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/openclaw/.openclaw
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
EOF
主要なディレクティブの説明:
After=network-online.target は OpenClaw がネットワーク準備完了後に起動することを保証します(LLM API が必要なため)
Restart=on-failure と RestartSec=5 でクラッシュ時に5秒待って再起動
StartLimitBurst=5(300 秒ウィンドウ内)で無限再起動ループを防止
ProtectSystem=strict は ReadWritePaths を除いてファイルシステムを読み取り専用にします[2]
NoNewPrivileges と PrivateTmp でプロセスをさらにサンドボックス化
手動ユーザーサービスファイル
root なしでユーザーレベルのサービスを設定する場合:
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/openclaw.service << 'EOF'
[Unit]
Description=OpenClaw AI Agent Runtime
After=default.target
[Service]
Type=simple
ExecStart=%h/.nvm/versions/node/v22.14.0/bin/openclaw start --daemon
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production
[Install]
WantedBy=default.target
EOF
%h 指定子はユーザーのホームディレクトリに展開されます。
systemctl --user daemon-reload
systemctl --user enable openclaw.service
systemctl --user start openclaw.service
ヘッドレスサーバーでの Linger の有効化
デフォルトでは、ユーザーサービスはユーザーの最後のセッションが終了すると停止します。ヘッドレスサーバーでは linger を有効にしてください:
sudo loginctl enable-linger $USER
loginctl show-user $USER | grep Linger
# Linger=yes
これにより、ログイン状態に関係なく起動時にユーザーサービスが実行され続けます[3]。
システムサービスの起動
sudo systemctl daemon-reload
sudo systemctl enable openclaw.service
sudo systemctl start openclaw.service
sudo systemctl status openclaw.service
journalctl によるログの確認
# リアルタイムでログをフォロー
sudo journalctl -u openclaw.service -f
# 最後の起動以降のログ
sudo journalctl -u openclaw.service -b
# 過去1時間のログ
sudo journalctl -u openclaw.service --since "1 hour ago"
# エラーのみ
sudo journalctl -u openclaw.service -p err
ログの保持期間を設定:
sudo tee -a /etc/systemd/journald.conf > /dev/null << 'EOF'
SystemMaxUse=500M
MaxRetentionSec=30day
EOF
sudo systemctl restart systemd-journald
リソース制限
systemd は Linux cgroups と統合して、ハードリソース制限を強制します:
[Service]
# メモリ
MemoryMax=2G
MemoryHigh=1536M
# CPU (200% = 2コア)
CPUQuota=200%
Nice=10
# I/O
IOSchedulingClass=best-effort
IOWeight=50
これらを [Service] セクションに追加し、以下を実行:
sudo systemctl daemon-reload
sudo systemctl restart openclaw.service
systemctl show openclaw.service | grep -E "Memory|CPU"
ファイルを編集せずに一時的にオーバーライドする場合:
sudo systemctl set-property openclaw.service MemoryMax=1G
再起動ポリシー
Restart=on-failure # ゼロ以外の終了コードでのみ再起動
RestartSec=5 # 試行間に5秒待機
StartLimitIntervalSec=300
StartLimitBurst=5 # 5分あたり最大5回の失敗
OpenClaw が時々予期せずコード 0 で終了する場合は、Restart=always に切り替え、RestartPreventExitStatus=SIGTERM を設定して systemctl stop が正常に動作するようにしてください。
監視
systemctl is-active openclaw.service # active/inactive
systemctl is-enabled openclaw.service # enabled/disabled
systemctl is-failed openclaw.service # active/failed
監視スクリプトで使用:
#!/bin/bash
if ! systemctl is-active --quiet openclaw.service; then
echo "OpenClaw is down!" | mail -s "Alert" admin@example.com
fi
トラブルシューティング
Permission denied: sudo chown -R openclaw:openclaw /home/openclaw/.openclaw
バイナリが見つからない: ExecStart パスが which openclaw と一致することを確認してください。
ポートが使用中: sudo ss -tlnp | grep 19090
API キーが見つからない: インライン変数の代わりに環境ファイルを使用:
sudo mkdir -p /etc/openclaw
sudo tee /etc/openclaw/env > /dev/null << 'EOF'
ANTHROPIC_API_KEY=sk-ant-your-key-here
EOF
sudo chmod 600 /etc/openclaw/env
サービスで EnvironmentFile=/etc/openclaw/env として参照します。
失敗したサービスのリセット:
sudo systemctl reset-failed openclaw.service
sudo systemctl start openclaw.service
PM2 および Docker との比較
| 機能 |
systemd |
PM2 |
Docker |
| 起動時の自動開始 |
ネイティブ |
pm2 startup が必要 |
--restart フラグ |
| ログ管理 |
journald(組み込み) |
カスタムログファイル |
docker logs |
| リソース制限 |
cgroups(カーネルレベル) |
アドバイザリーのみ |
cgroups |
| セキュリティサンドボックス |
広範 |
なし |
フル FS 分離 |
| オーバーヘッド |
無視可能 |
無視可能 |
約50MB + イメージ |
| Node.js 依存 |
なし |
あり |
なし |
専用マシン上の単一インスタンスには systemd が最もシンプルです。複数の分離されたインスタンスには、Docker(またはマネージドホスティングの ClawTank)が適しています[4]。
完全な本番サービスファイル
[Unit]
Description=OpenClaw AI Agent Runtime
Documentation=https://docs.openclaw.dev
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw
ExecStart=/usr/bin/openclaw start --daemon
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
StartLimitIntervalSec=300
StartLimitBurst=5
TimeoutStopSec=30
Environment=NODE_ENV=production
EnvironmentFile=-/etc/openclaw/env
MemoryMax=2G
MemoryHigh=1536M
CPUQuota=200%
Nice=5
StandardOutput=journal
StandardError=journal
SyslogIdentifier=openclaw
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/openclaw/.openclaw
PrivateTmp=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
[Install]
WantedBy=multi-user.target
EnvironmentFile=-/etc/openclaw/env の - プレフィックスは、ファイルが存在しなくても systemd が失敗しないことを意味します。
まとめ
systemd は OpenClaw を確実に実行するために必要なすべてを提供します:起動時の自動起動、クラッシュ回復、構造化ログ、リソース制御。組み込みの openclaw onboard --install-daemon が一般的なケースを処理します。高度なデプロイメントでは、手動サービスファイルでランタイム環境のあらゆる側面を調整できます。
参考資料
- systemd - System and Service Manager
- systemd.exec - Sandboxing and security directives
- loginctl enable-linger documentation
- PM2 - Node.js process manager
OpenClaw をデプロイしませんか?
Docker・SSH・DevOps 不要。1分以内でセットアップ。
無料トライアルを始める