shellとかコマンドとかをサービス化するやつ
これも忘れがちだからメモ
この記事は必要に応じて調べながら修正していく。
やり方
sudoして/etc/systemd/system/にサービス名.serviceを作る。
各セクションの説明はsystemd サービスユニット覚書のほうが詳しく載ってる。
Unit
サービスの説明
| 項目 | 説明 |
|---|---|
| Description | 説明 |
| After | 前提サービス※ |
| Before | このサービスより前に起動するべきサービス |
※ディレクトリのマウントを待つことも可能。/home/min06s/hogeを待つならhome-min06s-hoge.mountと書く
Servise
サービス自体の設定
| 項目 | 説明 |
|---|---|
| ExecStart | 実行コマンド |
| Restart | Restartオプション |
| Type | サービスタイプ |
Install
サービスのenable/disableに対するオプション
| オプション | 説明 |
|---|---|
| WantedBy | enable時にこのUnitの.wantsディレクトリにリンクを作成する |
| RequiredBy | enable時にこのUnitの.requiredディレクトリにリンクを作成する |
| Also | enable/disable時に同時にenable/disableするUnit |
| Alias | enable時にこのUnitの別名を用意 |
参考:http://enakai00.hatenablog.com/entry/20130917/1379374797
例
とりあえず適当に使いたいときはExecStartらへんをちゃんとしておけばok
[Unit]
Description = example
After=network-online.target
ConditionPathExists=/home/user/script
[Service]
ExecStart=/home/user/script/ping.sh
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target
Restartについて
結構細かい設定が可能。
| オプション | 説明 |
|---|---|
| no | プロセスが終了してもプロセスを再起動しません。 |
| on-success | プロセスが正常終了したときにプロセスを再起動します。ただし正常終了とは終了コードが 0 のときや SIGHUP, SIGINT, SIGTERM, SIGPIPE のシグナルで終了した場合のことです。 |
| on-failure | プロセスが異常終了したときにプロセスを再起動します。ただし異常終了とは終了コードが 0 以外のときやコアダンプなどの上記4つ以外のシグナルで終了した場合などのことです。 |
| on-abnormal | on-failure と似ていますが、終了コードによるプロセスの再起動はしません。 |
| on-abort | プロセスが上記4つ以外のシグナルで終了したときにプロセスを再起動します。 |
| on-watchdog | watchdogがタイムアウトしたときにプロセスを再起動します。 |
有効化
$ sudo nano /etc/systemd/system/ping.service
$ sudo chown root:root /etc/systemd/system/ping.service
$ sudo chmod 644 /etc/systemd/system/ping.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable ping.service
$ sudo systemctl start ping.service