「設定 - Systemdサービスユニット」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
編集の要約なし
94行目: 94行目:
  sudo vi /etc/systemd/system/<ユニットファイル名>.service
  sudo vi /etc/systemd/system/<ユニットファイル名>.service
<br>
<br>
# スクリプトを使用する場合
[Unit]
Description =          # サービスの説明を記述する
After = network.target  # ※指定しなくてもよい
[Service]
User=              # ユーザ名  例. root  ※指定しなくてもよい
WorkingDirectory=  # 実行するファイルまたはスクリプトがあるディレクトリのフルパス  ※指定しなくてもよい
ExecStart =        # 実行するファイルまたはスクリプトへのフルパス または ファイル名のみ(WorkingDirectoryを指定する場合)
Restart=always    # ※指定しなくてもよい
[Install]
WantedBy =        # multi-user.target または graphical.target等
<br>
# Pythonを使用する場合
  [Unit]
  [Unit]
  Description =   # <- サービスの説明を記述する
  Description =           # サービスの説明を記述する
  After = network.target
  After = network.target # ※指定しなくてもよい
   
   
  [Service]
  [Service]
  ExecStart =   # <- 実行するファイルまたはスクリプトへのフルパス
User=              # ユーザ名  例. root  ※指定しなくてもよい
WorkingDirectory=  # 実行する.pyファイルがあるディレクトリのフルパス  ※指定しなくてもよい
  ExecStart =       # <Pythonの実行ファイル> <実行する.pyファイルへのフルパス または ファイル名のみ(WorkingDirectoryを指定する場合)>
                    # 例. /usr/bin/python3 main.py
Restart=always    # ※指定しなくてもよい
   
   
  [Install]
  [Install]
  WantedBy =   # <- multi-user.target または graphical.target等
  WantedBy =         # multi-user.target または graphical.target等
<br>
<br>
以下の例では、Glancesという名前のサービスファイルを作成して、Linux向けの監視ツールであるglancesをバックグラウンドで動作させている。<br>
以下の例では、Glancesという名前のサービスファイルを作成して、Linux向けの監視ツールであるglancesをバックグラウンドで動作させている。<br>
138行目: 159行目:
|}
|}
</center>
</center>
<br>
サービスファイルを読み込んで、新しいサービスを追加する。<br>
sudo systemctl daemon-reload
<br><br>
<br><br>



2021年10月6日 (水) 02:23時点における版

概要

サービスとは、PCの起動時に自動的に実行され、バックグラウンドで仕事をするために待機するソフトウェアのことである。

一般的に、サービスはグラフィカルユーザインターフェースを持たず、ユーザの操作無しに動作する。
最もよく知られているサービスは、Web、メール、データベース等のサーバで、Apache、MySQL等がある。

また、ハードウェアの検出やUSBメモリの自動統合(マウント)等もサービスによって行われる。

サービスには、システム起動時に関連するタスクやハードウェアに関連するタスクを行う"内部サービス"と、
その後にユーザがインストールするサービス(通常は全てのサーバサービスを含む)の2種類がある。

技術用語やコンピュータ用語では、サービスは伝統的にデーモンと呼ばれている。
そのため、サーバコンポーネントであるsshdやmysqldのように、サービスを表すプログラムの最後の文字として"d"が用いられることが多い。

一方、Systemdは、システムおよびセッションマネージャ(initシステム)であり、
コンピュータの起動プロセスからシャットダウンまでの全動作時間にわたって、システム上で動作するすべてのサービスを管理する役割を担っている。

プロセスは常に(可能な限り)並行して起動され、起動プロセスを可能な限り短くする。
ここで、.serviceで終わる設定ファイルを作成して、Systemdが制御・監視するプロセスに関するコードを保持する場合をSystemd Service Unitファイルと呼ぶ。

Systemdには、サービス、タイマ、マウントポイント、ソケット、スワップスペース、デバイス等のユニットが存在する。
そのため、Systemdは管理用の設定の全てをファイルから取得する。

Systemdの用語では、これらを"ユニット"と呼び、システム全体に適用されるユニットと各ユーザ領域にのみ適用されるユニットがある。

ユニットには、サービスを開始するためのサービスユニットや、ある時点でのアクションを(繰り返し)実行するためのタイマユニット等、様々な種類がある。

各タイプのユニットファイルに共通しているのは、iniファイルに似た構造をしていることである。
ユニットファイルは、いくつかのセクション(多くの場合、3セクション)で構成されている。

Systemdではセクションと呼ばれ、その中に一連のキーと値のペア(Systemdではディレクティブと呼ばれる)が格納されている。


コマンドライン

コマンドラインやターミナルでSystemdを管理するツールはsystemctlと呼ばれる。

多くのコマンドはシステムに深く介入するため、root権限が必要である。
そのため、必要な操作を行うには、このコマンドをスーパユーザ権限で実行する必要がある。


ログ

Systemdは、ログ情報を中央のジャーナルに書き込む。
これは、journalctlコマンドにより読み出すことができ、検索やフィルタのオプションも含まれている。


システム全体の単位

usr/lib/systemd/systemディレクトリには、サービスによってシステム全体にプレインストールされているユニットの全てのファイルがある。

/etc/systemd/systemディレクトリには、ユーザが作成または編集したシステム全体のユニットの全てのファイルがある。
/etc/systemd/systemディレクトリと/usr/lib/systemd/systemdディレクトリで同名のユニットファイルがある場合は、
/etc/systemd/systemディレクトリのファイルが優先される。


ユニットの種類

ユニットには様々な種類があり、ファイルの拡張子に応じてsystemdの扱いが異なる。

Systemdユニットファイルの種類
種類(拡張子) 説明
.device デバイスファイルを作成する。
.mount ファイルシステムのマウントとアンマウントをする。
.path ファイルやディレクトリの変更に応じたサービスユニットを実行する。
.network ネットワークの設定を行う。
.service サービスを設定する。
.socket プロセス間の接続を確立する。
.target ユニットのグループを定義する。
.timer Cronジョブのような定期的なタスクを実行する。


ここでは、.service拡張子のユニットについて記載する。


独自のユニットやSystemdサービスファイルの作成

例えば、PC起動時に何らかのスクリプトやソフトウェアをバックグラウンドで実行したいとする。
そのためには、サービスユニットを作成する必要がある。

サービスユニットを作成するための構文を、以下に示す。

まず、/usr/lib/systemd/systemディレクトリに、ユニットファイルを作成する。

sudo vi /usr/lib/systemd/system/<ユニットファイル名>.service
または
sudo vi /etc/systemd/system/<ユニットファイル名>.service


# スクリプトを使用する場合

[Unit]
Description =           # サービスの説明を記述する
After = network.target  # ※指定しなくてもよい

[Service]
User=              # ユーザ名  例. root  ※指定しなくてもよい
WorkingDirectory=  # 実行するファイルまたはスクリプトがあるディレクトリのフルパス  ※指定しなくてもよい
ExecStart =        # 実行するファイルまたはスクリプトへのフルパス または ファイル名のみ(WorkingDirectoryを指定する場合)
Restart=always     # ※指定しなくてもよい

[Install]
WantedBy =         # multi-user.target または graphical.target等


# Pythonを使用する場合

[Unit]
Description =           # サービスの説明を記述する
After = network.target  # ※指定しなくてもよい

[Service]
User=              # ユーザ名  例. root  ※指定しなくてもよい
WorkingDirectory=  # 実行する.pyファイルがあるディレクトリのフルパス  ※指定しなくてもよい
ExecStart =        # <Pythonの実行ファイル> <実行する.pyファイルへのフルパス または ファイル名のみ(WorkingDirectoryを指定する場合)>
                   # 例. /usr/bin/python3 main.py
Restart=always     # ※指定しなくてもよい

[Install]
WantedBy =         # multi-user.target または graphical.target等


以下の例では、Glancesという名前のサービスファイルを作成して、Linux向けの監視ツールであるglancesをバックグラウンドで動作させている。

sudo vi /usr/lib/systemd/system/glances.service


[Unit]
Description = Glances in Web Server Mode
After = network.target

[Service]
ExecStart = /usr/bin/glances -w -t 5

[Install]
WantedBy = multi-user.target


[Install]セクションでは、[WantedBy]キーにより、ユニットがいつ起動するかを指定する。
下表に、指定することができるキーの値を示す。

ターゲット 説明
multi-user.target グラフィカルログインの有無にかかわらず、マルチユーザシステム用(ランレベル3に対応)
graphical.target グラフィカルログインが必要なマルチユーザシステム用(ランレベル3 + グラフィカルログインに対応)
rescue.target 一般的に、シングルユーザモードはシステムのレスキュー時にのみ必要(ランレベル1に対応)
reboot.target システムの再起動時にのみユニットが実行する。
poweroff.target システムのシャットダウン開始時にのみ実行するユニットである。
default.target 別の既存ターゲットへのシンボリックリンクである。
例えば、Ubuntuデスクトップの初期設定では、default.targetはgraphical.targetである。


サービスファイルを読み込んで、新しいサービスを追加する。

sudo systemctl daemon-reload



手動で作成したシステムのサービスユニットを有効にする

サービスユニットの作成後は、サービスを有効にして起動する必要がある。

<サービスユニットのファイル名>において、
例えば、上記で作成したglancesサービスを有効にするには、sudo systemctl enable glances.serviceとなる。

以下のコマンドを実行して、新しいサービスユニットを読み込み・追加する。

sudo systemctl daemon-reload


サービスユニットを自動起動に設定する。

sudo systemctl enable <サービスユニットのファイル名>


サービスユニットを起動する。

sudo systemctl start <サービスユニットのファイル名>


サービスユニットの状態を確認する。
sudo systemctl status <サービスユニットのファイル名>