---
# System prepended metadata

title: systemd
tags: [その他]

---

###### tags: `その他`
# systemd　

## サービス登録
ユニットファイルを配置して、systemdに読み込ませる。

1. ユニットファイルの配置
`/etc/systemd/system/<UNIT_FILE>`

2. systemdを読み込み直しする
`systemctl daemon-reload`

---

## コマンド操作
**サービス一覧表示**
`systemctl list-unit-files`
**サービス状態確認**
`systemctl status <UNIT_NAME>`
**サービス開始/終了**
`systemctl start <UNIT_NAME>`
`systemctl stop <UNIT_NAME>`
**サービス自動起動の有効化/無効化**
`systemctl enable <UNIT_NAME>`
`systemctl disable <UNIT_NAME>`

# ユニットファイルの書き方

非常に勉強になる記事
https://enakai00.hatenablog.com/entry/20130917/1379374797

## 構成
- Unit: ユニットの説明, 依存関係
- Service: 起動/再起動設定
- Install: 自動起動設定

## Example
```unit
[Unit]
Description=OpenSSH server daemon 
Documentation=man:sshd(8) man:sshd_config()
After=network.target sshd-keygen.service 
Wants=sshd-keygen.service

[Service]
Type=notify
EnvirionmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

```
---
### Unit
**【Description】**
サービス詳細表示した時の説明文

**【After】**
作成しているユニットがどのユニットに依存しているか定義

---
### Service
**【Type】**
実行方法の定義


| Type | 説明 |
| -------- | -------- |
| simple | デフォルト<br>サービス起動コマンド(ExecStart)がそのままメインプロセスの場合 |
| forking | 子プロセスをフォークしてバックグラウンドに回して、最初のコマンド自体は終了する場合 |
| oneshot | サービス起動コマンドを実行して、それが完了したタイミングで起動完了と判断する場合 |

**【Environment】**
実行時に取り込む環境変数の定義

**【ExecStart】**
実行するコマンド

**【Restart, RestartSec】**
アプリ停止時の再起動設定

---
###  Install
**【WantedBy】**
`systemctl enable`で自動起動を有効化した際に、どの Unitの前提として設定されるべきかを指定する。
基本的に`multi-user.target`で大丈夫