1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Linux】ユニットファイルについて

Posted at

はじめに

systemdのサービスファイルである「ユニットファイル」について調べた内容をまとめます。

systemdとは

Linuxの初期化プロセスの一つで、サービスの起動・管理を行う仕組み。多くのLinuxディストリビューションで標準採用されている

基本構成

各セクションの意味

セクション名 設定内容
Unit ユニットの説明や依存関係を設定する
Service サービスの実行方法や挙動を設定する
Install ユニットがsystemctl enableコマンドを実行したときにどのターゲットに関連付けるかを指定する

※「ユニット」はsystemdが管理する「リソースの単位」
※「サービス」はユニットの一種で、主にバックグラウンドプロセスやデーモンを管理するユニット

[Unit]セクション

  • 主要オプション
オプション名 設定内容
Description サービスの説明。ユニットが何をするものかを説明する
After 起動の順序。指定先が準備された後にユニットを起動する
Before 起動の順序。指定先が準備される前にユニットを起動する
Requires 強い依存関係。指定先が無ければ、ユニットは起動できない
Wants 弱い依存関係。指定先が無くても、ユニットは起動できるが、できれば起動してほしい
  • 設定例
[Unit]
Description=My Application Service
After=network.target

[Service]セクション

  • 主要オプション
オプション名 設定内容
ExecStartPre/Post サービス起動前/後に実行するコマンド
ExecStart サービス起動時に実行するコマンド(必須)
ExecStop サービス停止時に実行するコマンド
ExecStopPost サービス停止後に実行するコマンド
ExecReload サービス再読み込み時に実行するコマンド
Restart サービスが停止したときの再起動ポリシー
RestartSec 再起動までの待ち時間(秒)
User サービスを実行するユーザー
Group サービスを実行するグループ
WorkingDirectory サービス起動時の作業ディレクトリ
Environment 環境変数の設定(例:Environment="VAR=value")
EnvironmentFile 環境変数を読み込むファイル
TimeoutStartSec サービス起動時のタイムアウト時間
TimeoutStopSec サービス停止時のタイムアウト時間
Type サービスの起動タイプ 
  • Restartの主な値
挙動
no デフォルト値。再起動しない
on-success 正常終了(終了コード0)のときに再起動
on-failure 異常終了(終了コード≠0、シグナル終了、タイムアウトなど)のときに再起動
always 常に再起動(正常・異常問わず)
  • Typeの主な値
挙動
simple デフォルト値。 ExecStart で指定したプロセスがそのままサービス本体となり、ExecStart が終了するまでサービスは起動中とみなされる
forking バックグラウンドに移行する。通常、デーモン化するプロセスに使われる
oneshot 一回だけコマンドを実行して終了する
notify サービスの起動完了を systemd に通知する
idle 他のサービスの起動が終わるまで待ってから実行する
  • 設定例
[Service]
ExecStart=/usr/bin/myapp
Restart=always
User=myuser
WorkingDirectory=/home/myuser/myapp

[Install]セクション

  • 主要オプション
オプション名 設定内容
WantedBy 指定したターゲットに「必要とされている(Wanted)」関係を作る。enable 時にそのターゲットの wants/ に symlink が作られる
RequiredBy 指定したターゲットに「必須(Required)」関係を作る。失敗するとターゲットごと止まる可能性がある
Alias ユニットに別名(別のユニット名)を付けられる。enable 時に別名でも使えるようになる
Also 一緒に有効化(enable)または無効化(disable)される他のユニット名を指定
DefaultInstance テンプレートユニット(@ 付きユニット)で、デフォルトのインスタンス名を指定
  • WantedByの主なターゲット
ターゲット名 説明
multi-user.target CLI(コンソール)向けサービスのターゲット。一般的な常駐サービス向けで、、複数のユーザーが同時にログイン可能な状態(GUIなし)でシステムを起動する、ターゲットはネットワークが接続されて、ユーザーがログインできるようになった状態を指す
graphical.target GUI(デスクトップ環境)向けのサービスを含むターゲット
network-online.target ネットワーク完全接続後に必要なサービス向け

※「ターゲット」は複数のサービスをまとめたグループ
※network.target は単にネットワークが「接続された」状態を示すが、network-online.target は「完全に利用可能な状態」を示す

  • 設定例
WantedBy=multi-user.target
  • systemctl enable xxx.serviceの実行すると、/etc/systemd/system/multi-user.target.wants/xxx.service にシンボリックリンクが貼られる
  • シンボリックリンクにより、multi-user.targetが起動する際にxxx.serviceが自動的に起動されるようになる
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?