web-dev-qa-db-ja.com

ユーザーのログイン時にsystemctlサービスを開始します

ユーザーログイン時に実行されるサービスを作成しようとしています。

非rootユーザーとして、ファイルを作成しました。

> cat ~/.local/share/systemd/user/voodoo.service

[Unit]
Description=User service test

[Service]
RemainAfterExit=yes
Type=simple
ExecStart=/bin/bash -c "touch /tmp/ok123"

[Install]
WantedBy=default.target

しかし、systemctlはそれを認識しません。

> systemctl --user restart voodoo.service
Failed to connect to bus: No such file or directory

何か案は?

7
daisy

最初にサービスをenableする必要があると思います:

systemctl --user enable voodoo.service
Created symlink /home/andreatsh/.config/systemd/user/default.target.wants/voodoo.service → /home/andreatsh/.local/share/systemd/user/voodoo.service

ご覧のとおり、これは適切なフォルダにシンボリックリンクを作成するだけです。次に、実行します:

systemctl --user restart voodoo.service 

そしてサービスはうまくいきました。

7
andreatsh

2つ、実際。これははるかに可能性の高いものです。

Ubuntu 15は、システム全体のサービス管理のためにsystemdに切り替えました。しかし、ユーザーごとのサービス管理は依然として新興企業の領域であり、これは16.04でも同じでした。

したがって、当然、systemctlは、ユーザーごとにsystemdのインスタンスを検索して対話することはありません。 systemctlは、サービスユニットファイルを認識しなかったことをしないと言っていることに注意してください。 systemdのユーザーごとのインスタンスと通信するための「バス」に接続できなかったと述べています。

参考文献

4
JdeBP