LoginSignup
48
28

More than 5 years have passed since last update.

サーバー起動時に非rootユーザーでsystemdを使ってサービスを立ち上げる

Posted at

ハマりどころしかなくてなかなかうまくいかなかったのでハマったポイントを全てメモしておく。

設定ファイルはhome以下に置く必要がある

/etc/systemd 以下とかに置いてもダメ。~/.config/systemd/user/*.service を使わないと--userではうまくいかない。

[Install]を必ず書く

[Install]
WantedBy=default.target

がないとenableしても意味ない

--userモードにはmulti-user.targetが存在しない

普通、rootで起動するサービスはmulti-user.targetにしておくのが良いようだが、--userで使う場合はdefault.targetじゃないと起動してくれない。

[Install]をいじったら systemctl --user enableを叩き直す

WantedByが変わるとsymlink先も変わる。その場合enableもやり直さないと当然ダメ。
その前にsystemctl --user daemon-reloadが必要かもしれないがこれはちゃんと確認してない。

~/.config/systemd/user/default.target.wants/*.service がなかったらまず動かない。

systemのunitは参照できない

systemd --user runs as a separate process from the systemd --system process. User units can not reference or depend on system units.

ということなので、After=mysql.serviceみたいなのを書いてしまうと逆に動かなそう。これが原因で動かなかったのかは確認してないが、とにかく外した状態で動いている。

デフォルトではログインした時に立ち上がる

まず、ログインしたら立ち上がる状態には持っていく必要がある。その後、以下のようなコマンドを実行することでサーバーの起動時にサービスが立ち上がるようになる。

sudo loginctl enable-linger username
48
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
28