systemd --user
を使うことでroot
権限が必要ないサービスやタイマーを非root
権限のユーザーがroot
権限なしに設定することができる。
ただし、システムのサービスと異なり起動時にサービスは起動してくれない。
ユーザーのセッションが存在するとき(私の場合はssh
サーバーとして利用しているので、自分がサーバーにログインしているとき)にしか動作してくれない。
サーバーの起動時にssh
でログインするより前に作図したいことだってあるだろうし、タイマー関連の操作はログインしているかどうかにかかわらず指定した時刻に動作してほしい。
今回はそういった場合にどうすればいいのかを調べてまとめた話。
こういったときには、loginctl
を使って設定を行っておくとユーザーセッションのありなしにかかわらずサーバーが起動したときにユーザーが設定したサービスを立ち上げることができる。
まずは以下のように、Lingerの項目がno
になっていることを確認する。
$ loginctl user-status XXXXXX (1000) Since: Mon 2023-04-17 09:49:57 JST; 1h 44min ago State: active Sessions: 6 5 *1 Linger: no <--- Unit: user-1000.slice ...
次に、以下のコマンドでユーザーセッションのありなしに関わらずサービスを立ち上げるよう指示する。
$ loginctl enable-linger
最後にもう一度、Lingerの箇所がyesになっていることを確認する。
$ loginctl user-status | head XXXXXX (1000) Since: Mon 2023-04-17 09:49:57 JST; 1h 43min ago State: active Sessions: 6 5 *1 Linger: yes <--- Unit: user-1000.slice ...
これで再起動などをかけた後に、サービスがきちんと起動しているはず。