ユーザー権限で systemd のサービスを稼働させる方法

root権限ではなくて,一般ユーザ権限で systemd のサービスを登録&稼働させる方法です

サービスの登録

systemdのサービスは「ユニットファイル」と呼ばれる設定ファイルに記述します.
ユーザ権限で起動するサービスは ~/.config/systemd/user/ ディレクトリ以下にユニットファイルを配置します.

例えばサービス名を myjob とすると,ユニットファイルのファイル名は ~/.config/systemd/user/myjob.service となります.

ユニットファイルの雛形

ユニットファイルの雛形です.

[Unit]
Description=my job service

[Service]
ExecStart=起動コマンド
ExecStop=/bin/kill ${MAINPID}
Restart=always

[Install]
WantedBy=default.target

ポイントは

  • 起動コマンドは ExecStartで指定
  • 終了コマンドは ExecStopで指定
  • WantedBy=default.target を必ずつけること


例えば python で記述されたスクリプトを systemd経由で起動したい場合は例えば

ExecStart=/usr/bin/python3  /path/to/filename.py  --start --verbose

という風に書けばOKです

上記の雛形ではサービス停止時は kill コマンドでプロセスをkillするように書いてあります.

こちらも例えば

ExecStop=/usr/bin/python3  /path/to/filename.py  --stop

という感じで任意のコマンドが指定できます


より詳しい説明が必要な場合は以下のドキュメントを読むのが良いと思います.

サービスの登録


サービスの有効化

$ systemctl --user enable  myjob

状態確認

$ systemctl --user status  myjob

サービス手動起動

$ systemctl --user start  myjob

サービス手動停止

$ systemctl --user stop  myjob

サービス再起動

$ systemctl --user restart  myjob

ログの確認

$ journalctl --user 
$ journalctl --user -u myjob

サービスの自動起動

デフォルトでは一般ユーザのサービスは該当ユーザがログインした時に自動起動されます.

サーバー起動時に自動起動するには以下のコマンドをroot権限で実行します

$ sudo loginctl enable-linger username

これでユーザ名 username のサービスはシステム起動時に自動起動されるようになります.