ハマりどころしかなくてなかなかうまくいかなかったのでハマったポイントを全てメモしておく。
設定ファイルは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 thesystemd --system
process. User units can not reference or depend on system units.
ということなので、After=mysql.service
みたいなのを書いてしまうと逆に動かなそう。これが原因で動かなかったのかは確認してないが、とにかく外した状態で動いている。
デフォルトではログインした時に立ち上がる
まず、ログインしたら立ち上がる状態には持っていく必要がある。その後、以下のようなコマンドを実行することでサーバーの起動時にサービスが立ち上がるようになる。
sudo loginctl enable-linger username