systemd はシステムワイドでの起動とユーザレベルでの起動の 2 種類ある。
(sudo) systemctl<SUB_COMMAND><SERVICE_NAME># system-widesystemctl--user<SUB_COMMAND><SERVICE_NAME># user-levelユニットファイル (*.service) を書くとき、システムワイドでは問題ないがユーザレベルだと使えなかったり正しく起動できないものがあるのでまとめておく。
User /Group は使えないシステムワイドでは、どのユーザでデーモンを起動するかを指定するために、User やGroup というのを使うことがあるが、ユーザレベルでは使えない。
[Service]User=ubuntuGroup=ubuntuユーザレベルで上記の項目を書くと、以下のようなエラーが発生する。
foo.service:Failed to determine supplementary groups: Operation not permittedfoo.service: Failed at step GROUP spawning/usr/bin/env: Operation not permitted単にUser やGroup を削除すれば良い。
削除後はデーモンのリロードを忘れずに。
systemctl--user daemon-reloadmulti-user.target は使えないシステムワイドではWantedBy にmulti-user.target を指定することがあるが、これもユーザレベルでは使えない。
[Install]WantedBy=multi-user.targetこれが書かれていてもデーモンの起動自体はできるが、自動起動を有効にしていてもシステム起動時のデーモンの自動起動が効かなくなる。
代わりに、default.target が使える。
[Install]WantedBy=default.targetちなみに、上記の間違いを修正する際、すでに自動起動を有効にしている場合は、いったん無効にしてもう一度有効にする必要がある。もちろんデーモンのリロードも必要。
systemctl--user daemon-reloadsystemctl--user disable<SERVICE_NAME>systemctl--userenable<SERVICE_NAME>正しく追加されているか確認するには、以下のコマンドを実行する。
systemctl--user list-dependencies default.targethttps://github.com/systemd/systemd/issues/2690#issuecomment-186973730
バッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。
