8. Ollamaサービスを安定稼働させるための起動スクリプト管理術
手動実行からサービス化への移行が必須な理由
開発初期段階では、ターミナルでollama run ...と手動で実行することが一般的です。しかし、これを本番運用に持ち込むと、セッションが切断されたり、サーバー再起動時にサービスが停止したりするリスクが伴います。安定稼働のためには、OSのサービス管理機構に組み込む必要があります。
systemdによるサービス化の基本概念
Linux環境において、サービスを永続的かつ自動的に管理するための標準的な方法はsystemdを利用することです。Ollamaをサービス化する際は、単にollama serveを実行するだけでなく、依存関係や起動後の処理を定義することが重要です。
サービスファイル(例:ollama.service)を作成し、これをsystemdに読み込ませることで、再起動、自動起動、ステータス確認といった管理機能が利用可能になります。
具体的なユニットファイル作成手順
単なるExecStart=/path/to/ollama serveでは不十分なケースが多いため、以下の要素を考慮した記述が必要です。
| セクション | 目的 | 記述すべき内容 |
|---|---|---|
| [Unit] | 依存関係の定義 | After=network.target, Requires=network-online.target など、ネットワークが完全に確立してから起動するように指定する |
| [Service] | 実行方法と挙動の定義 | User/Groupの指定、Restart=always、WorkingDirectoryの設定が必須 |
| [Install] | どのタイミングでサービスを有効化するか | WantedBy=multi-user.target を指定し、OS起動時に自動起動させる設定を行う |
起動スクリプトの高度な制御(ExecStartPost)
単にサービスを起動するだけでなく、モデルのプリロード(事前ロード)を組み込むことが、体感速度を大きく左右します。これはExecStartPostディレクティブを利用して実現できます。
【構築事例】
起動時に特定のモデルをロードさせる場合、ExecStartPost=/usr/bin/ollama run --quietのようなコマンドを追記します。これにより、サービスが「起動完了」と判断する前に、必要なモデルがVRAM上に確保され、即座に利用可能な状態になります。
このプリロードのタイミングを考慮に入れ、サービスが完全に準備できたと判断する基準(Health Check)を別途設けることが、運用上の大きなポイントとなります。
まとめ:サービス化は「自動化」と「制御」の実現
Ollamaの安定運用は、systemdによるサービス化を通じて、起動の自動化と、ExecStartPostによる初期リソースの事前確保を行うことで、初期応答速度の最適化と信頼性の確保が実現できます。

