search
LoginSignup
24
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

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

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

設定ファイルは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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
24
Help us understand the problem. What are the problem?