systemctl

example

  • /etc/systemd/system/ 配下とかに配置.
[Unit]
Description=docker-compose nginx-proxy service
Requires=docker.service

[Service]
User=root
Type=simple

Environment=COMPOSE_FILE=/home/composer/nginx-proxy/docker-compose.yml

ExecStartPre=/usr/bin/docker-compose -f ${COMPOSE_FILE} kill
ExecStartPre=/usr/bin/docker-compose -f ${COMPOSE_FILE} rm -v -f
ExecStartPre=/usr/bin/docker-compose -f ${COMPOSE_FILE} down

ExecStart=/usr/bin/docker-compose -f ${COMPOSE_FILE} up --force-recreate --abort-on-container-exit

ExecStop=/usr/bin/docker-compose -f ${COMPOSE_FILE} stop
ExecStopPost=/usr/bin/docker-compose -f ${COMPOSE_FILE} rm -v -f
ExecStopPost=/usr/bin/docker-compose -f ${COMPOSE_FILE} down

Restart=always
RestartSec=180s

[Install]
WantedBy=multi-user.target

unit section

Description: 説明
Documentation: ドキュメント
Requires: 自Unitが必要とする前提Unit(依存unit起動に失敗した場合,自unitも失敗する.強い依存.)
Wants: 自Unitが必要とする前提Unit(依存unitが失敗しても,自unitは起動を継続する.弱い依存.)
After: 自Unitより先に起動するべきUnit
Before: 自Unitより後に起動するべきUnit
Conflict: 自Unitと同時に起動するべきでないUnit
  • Requires/WantsとAfter/Beforeは概念として異なるものだということに注意する.依存関係と起動順序は異なるものである.

install section

WantedBy: enable時にこのUnitの.wantsディレクトリにリンクを作成する
RequiredBy: enable時にこのUnitの.requiredディレクトリにリンクを作成する
Also: enable/disable時に同時にenable/disableするUnit
Alias: enable時にこのUnitの別名を用意
  • ランレベルとtargetの対応
    • 0: poweroff.target(電源停止)
    • 1: rescue.target(レスキュー/シングルユーザモード)
    • 3: multi-user.target(マルチユーザモード(console))
    • 5: graphical.target(GUIモード)
    • 6: reboot.target(再起動)
    • none: emergency.target(緊急モード)

service

User: Unitを操作するユーザ
Group: Unitを操作するグループ
RootDirectory: 指定directoryにchrootする.
ExecStart: 起動コマンド
ExecReload: reloadコマンド
ExecStop: 停止コマンド
ExecStartPre/ExecStartPost: サービス起動前後の追加コマンド(サービス起動判定には関連させたくないコマンドを記載)
ExecStopPost: サービス停止後に実行するコマンド(サービスが異常停止した際にも実行される)
EnvironmentFile: 環境変数を読み込むファイル
Type: サービスプロセスの起動完了の判定法(simple[default]/forking/oneshot/notify/dbus)
RemainAfterExit: oneshotの場合等,exitしたあともstatus activeを継続したい場合にyesとする(yes/no)
PIDFile: fork型サービスのメインプロセスのPIDファイル指定(forkするとmainプロセスpidが掌握できないため,メインプロセスPIDを示すファイルを指定する.)
BusName: D-Bus型サービスのbus接続名
Restart: サービスプロセス停止時の再起動条件(no[default]/always/on-success/on-failure)
RestartSec: リスタートを試みる間隔
StartLimitInterval: 起動制限インターバル.インターバル時間中にStartLimitBurst回を超えた回数startすると制限される.
StartLimitBurst: 起動制限回数
PrivateTmp:  このサービス専用の/tmpと/var/tmpを用意する
KillMode: ExecStopでプロセスが残っている場合にどうするか.(none(残置)/process(メインプロセスをsigterm/sigkill)/control-group(グループ内全プロセスをsigterm/sigkill)/mixed(processしてcontrol-groupする))

commands

  • systemctl [status/enable/disable/start/stop/reload/reload-or-restart/try-restart/reload-or-try-restart] example.service
    • reloadはunitがreload対応しているときのみ.
    • try-restart系は停止している場合は何もしない,restartの場合は停止しても起動する.
    • reload-or-*系はreload対応していればreload,そうでない場合はreload, or try-reload
  • systemctl daemon-reload
    • unitファイル再読み込み.
  • systemctl list-unit-files --type=service
    • type=service一覧
  • systemctl is-enabled example.unit