systemdのユニットファイルを作成する方法

当ページのリンクには広告が含まれています。

## はじめに

自作のシェルスクリプトやアプリケーションをサーバー起動時に自動で立ち上げたい、異常終了したら自動再起動させたい、というときに使うのが systemd の「ユニットファイル」です。

ユニットファイルを `/etc/systemd/system/` に配置することで、`systemctl` で他のサービスと同じように制御できます。本記事では `.service` ユニットの基本構造と、よく使うディレクティブを実例付きで解説します。

## 症状・背景

systemdユニットファイル が必要になる主な場面:

– 独自のNode.js/Pythonアプリを常駐させたい
– スクリプトを起動時に自動実行したい
– プロセスがクラッシュしても自動で再起動させたい
– 既存サービスの設定をオーバーライドしたい

[図解画像をここに表示]

## 手順・設定方法

### ステップ1: ユニットファイルの基本構造

“`bash
# 配置場所
sudo vi /etc/systemd/system/myapp.service
“`

“`ini
[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/server.js
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
“`

### ステップ2: 主要ディレクティブ

“`ini
# [Service] セクションでよく使うもの
Type=simple # フォアグラウンド実行 (デフォルト)
Type=forking # daemonize するプロセス用
Type=oneshot # 一度だけ実行 (バッチ系)

ExecStart=/path/to/program
ExecStop=/path/to/stop # 任意
ExecReload=/bin/kill -HUP $MAINPID

Restart=on-failure # 異常終了時のみ再起動
Restart=always # 常に再起動
RestartSec=5s

Environment=”NODE_ENV=production”
EnvironmentFile=/etc/myapp.env
“`

### ステップ3: 有効化と動作確認

“`bash
# ユニットファイルを再読み込み
sudo systemctl daemon-reload

# 起動と自動起動を有効化
sudo systemctl enable –now myapp

# 状態確認
sudo systemctl status myapp
sudo journalctl -u myapp -n 50

# 試しに停止・再起動
sudo systemctl restart myapp
“`

### ステップ4: 応用 (タイマーとオーバーライド)

“`bash
# 既存サービスの一部だけ上書き (drop-in)
sudo systemctl edit nginx
# 自動で /etc/systemd/system/nginx.service.d/override.conf が作られる

# タイマーユニット例 (毎日3時に実行)
sudo vi /etc/systemd/system/backup.timer
“`

“`ini
[Unit]
Description=Daily backup

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
“`

## 注意事項

– ユニットファイルを編集したら必ず `systemctl daemon-reload` を実行しないと反映されません
– `ExecStart` には絶対パス必須。`PATH` に頼った相対パスは動きません
– `User=` で実行ユーザーを指定する場合、ファイルの権限が適切か確認しましょう
– `Restart=always` と短い `RestartSec` の組み合わせはCPUを食う暴走を招くことがあります

## まとめ

1. **構造**: `[Unit]` / `[Service]` / `[Install]` の3セクション
2. **配置**: `/etc/systemd/system/NAME.service` に保存
3. **再読込**: 編集後は `daemon-reload` が必須
4. **再起動**: `Restart=on-failure` で異常停止を自動復旧
5. **応用**: drop-in で既存ユニットを部分上書き

関連記事:
– [systemctlでサービスを管理する方法](../linux-systemctl-service/)
– [journalctlでsystemdログを確認する方法](../linux-journalctl-logs/)
– [シェルスクリプトの基本的な書き方](../linux-shell-script-basics/)

▼ 実践ガイド

【2026年】ネット証券口座の選び方とおすすめ比較 →

用語の意味がわかったら、実際の口座選びのポイントもチェックしてみてください。

※本記事に掲載している情報は、中立的な立場からの情報提供を目的としたものです。掲載している商品・サービスの購入や利用を推奨・強制するものではありません。投資には価格変動リスクが伴い、元本割れが生じる可能性があります。過去の運用実績やシュミレーション結果は、将来の運用成果を保証するものではありません。また、情報の正確性・最新性には十分配慮しておりますが、 内容の完全性や将来の結果を保証するものではありません。最終的な投資判断は、読者ご自身の判断と責任において行っていただくようお願いいたします。本記事の情報を利用したことによって生じたいかなる損害についても、当サイトでは一切の責任を負いかねますので、あらかじめご了承ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

マネジ局長は、「お金の大辞典」全体を統括する監修者です。

編集者であるマネ辞くんが収集・整理した金融・投資・税制データについて、制度の前提条件やリスク、誤解が生じやすい点がないかをチェックし、「この情報をどう受け取るべきか」という判断軸を補足します。

特定の商品やサービスをすすめる役割ではなく、読者が冷静に考えるためのブレーキ役として設計されています。

お金の判断は急がず、理解してから選ぶ。
それがマネ辞局長の基本スタンスです。

目次