Movatterモバイル変換


[0]ホーム

URL:


Kosuke AokiKosuke Aoki
🐷

ユーザレベルで systemd のユニットファイルを書くときの注意点

に公開

はじめに

systemd はシステムワイドでの起動とユーザレベルでの起動の 2 種類ある。

Shell
(sudo) systemctl<SUB_COMMAND><SERVICE_NAME># system-widesystemctl--user<SUB_COMMAND><SERVICE_NAME># user-level

ユニットファイル (*.service) を書くとき、システムワイドでは問題ないがユーザレベルだと使えなかったり正しく起動できないものがあるのでまとめておく。

User /Group は使えない

システムワイドでは、どのユーザでデーモンを起動するかを指定するために、UserGroup というのを使うことがあるが、ユーザレベルでは使えない。

[Service]User=ubuntuGroup=ubuntu

発生する問題

ユーザレベルで上記の項目を書くと、以下のようなエラーが発生する。

Log
foo.service:Failed to determine supplementary groups: Operation not permittedfoo.service: Failed at step GROUP spawning/usr/bin/env: Operation not permitted

解決策

単にUserGroup を削除すれば良い。

削除後はデーモンのリロードを忘れずに。

Shell
systemctl--user daemon-reload

https://unix.stackexchange.com/questions/438064/failed-to-determine-supplementary-groups-operation-not-permitted

multi-user.target は使えない

システムワイドではWantedBymulti-user.target を指定することがあるが、これもユーザレベルでは使えない。

[Install]WantedBy=multi-user.target

発生する問題

これが書かれていてもデーモンの起動自体はできるが、自動起動を有効にしていてもシステム起動時のデーモンの自動起動が効かなくなる。

解決策

代わりに、default.target が使える。

[Install]WantedBy=default.target

ちなみに、上記の間違いを修正する際、すでに自動起動を有効にしている場合は、いったん無効にしてもう一度有効にする必要がある。もちろんデーモンのリロードも必要。

Shell
systemctl--user daemon-reloadsystemctl--user disable<SERVICE_NAME>systemctl--userenable<SERVICE_NAME>

正しく追加されているか確認するには、以下のコマンドを実行する。

Shell
systemctl--user list-dependencies default.target

https://github.com/systemd/systemd/issues/2690#issuecomment-186973730

GitHubで編集を提案
Kosuke Aoki

Ruby / Rails / Shell Script / macOS / Ubuntu / Raspberry Pi / Network / Security

バッジを贈って著者を応援しよう

バッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。


[8]ページ先頭

©2009-2025 Movatter.jp