systemdのunitファイルは「なんとなく動く設定」と「事故らない設定」に大きな差があります。
本記事では、
- 最低限の構成
- 実務で必須の推奨設定
- Type別テンプレ
- 障害を防ぐための注意点
をそのままコピペして使える完全テンプレとして解説します。
目次
unitファイルの基本構造
systemdのunitファイルは、以下の3セクションで構成されます。
[Unit]
[Service]
[Install]
- [Unit]:依存関係・説明
- [Service]:起動方法・プロセス管理
- [Install]:自動起動設定
【最小構成】とりあえず動かすunit
[Unit]
Description=My App Service
[Service]
ExecStart=/usr/local/bin/myapp
[Install]
WantedBy=multi-user.target
これは検証用・学習用であり、実務では不十分です。
【実務推奨】標準unitテンプレ(Type=simple)
最も利用頻度が高い「常駐アプリ」向けのテンプレです。
[Unit]
Description=My Application Service
After=network.target
[Service]
Type=simple
User=myuser
Group=mygroup
ExecStart=/usr/local/bin/myapp
Restart=always
RestartSec=5
TimeoutStartSec=30
TimeoutStopSec=30
KillMode=process
[Install]
WantedBy=multi-user.target
このテンプレで防げる事故
- 一時的な異常終了でサービスが止まりっぱなし
- 起動失敗で無限再起動
- root実行による権限事故
Type別 完全テンプレ
Type=simple(常駐アプリ)
[Service]
Type=simple
ExecStart=/usr/bin/python3 /opt/app/app.py
Restart=always
Type=forking(デーモン)
[Service]
Type=forking
PIDFile=/var/run/myapp.pid
ExecStart=/usr/local/bin/myapp start
ExecStop=/usr/local/bin/myapp stop
Restart=on-failure
Type=oneshot(単発処理)
[Service]
Type=oneshot
ExecStart=/usr/local/bin/init.sh
RemainAfterExit=yes
必ず入れたい重要オプション
Restart
Restart=always
- 障害時の自動復旧
RestartSec
RestartSec=5
- 即再起動ループ防止
User / Group
User=appuser
Group=appgroup
- root実行回避
依存関係の正しい書き方
network.target 待ち
[Unit]
After=network.target
他サービス依存
[Unit]
Requires=mysql.service
After=mysql.service
起動しない時のチェックポイント
- ExecStartのパスは絶対パスか
- 実行権限はあるか
- Typeとプロセス挙動は一致しているか
確認コマンド
systemctl status myapp
journalctl -u myapp
unitファイル編集後に必ず行うこと
systemctl daemon-reload
systemctl restart myapp
systemctl enable myapp
daemon-reloadを忘れると変更は反映されません。
まとめ
systemd unitは「最低限動けばOK」ではなく、 異常時を前提に設計するものです。
本記事のテンプレを使えば、
- 起動事故
- 再起動ループ
- 権限トラブル
を大幅に減らすことができます。
迷ったらこのテンプレを基準にしてください。
あわせて読みたい


systemd サービスが自動起動しない/Enable されないときの原因と対処
Linux サーバーでは systemd によるサービスの自動起動設定が広く利用されています。しかし、意図したサービスが再起動後に自動で立ち上がらない、あるいは systemctl e…
あわせて読みたい


Type=simple / forking / oneshot の違い|systemd Unit設定の落とし穴
systemdのUnitファイルで必ず登場する Type=。 この指定を誤ると、 起動したのにすぐ落ちる activeなのにプロセスがいない 依存サービスが正しく起動しない といった非…
あわせて読みたい


systemdサービスが起動しない時の典型エラー集|原因別の調査手順と対処法
systemd管理のLinuxサーバーで、 サービスが起動しない activeにならない すぐ落ちる といったトラブルは非常によく発生します。 本記事では、現場で実際によく見る典型…
