システムユーザーモードでサービスが無効になる

システムユーザーモードでサービスが無効になる

私は現在RHEL 7.9を使用していますが、systemctlユーザーモードを有効にして次のファイルを作成する必要があります。[Eメール保護]これは問題ではありませんが、次のガイドリンクをたどると思いました。https://serverfault.com/questions/936985/cannot-use-systemctl-user-due-to-failed-to-get-d-bus-connection-permission

テストサービスを作成しました。

[Unit]
Description=Foo

[Service]
ExecStart=/home/glcmsd/test.sh

[Install]
WantedBy=multi-user.target

test.shどこ

#!/bin/bash
sleep 2h

だから私は走る

systemctl daemon-reload --user
systectl start test --user
systemctl enable test --user

サービスがうまく機能しています。

-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 10:14:38 BST; 5s ago
Main PID: 97445 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─97445 /bin/bash /home/glcmsd/test.sh
└─97446 sleep 2h

その後、sudo restartを実行しましたが、サービスの状態を確認したときにすでに非アクティブです。

-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: inactive (dead)

これをデバッグする方法や私が間違っているかどうかについての手がかりはありますか?

編集:rhel 8.2で同じテストを行いましたが、ガイドに従う必要はなく、同じ結果が得られました。

EDIT2:答えてくれてありがとう。とても役に立ちました。 Torinのソリューションを試してみましたが、RHEL 8.2では動作しますが、7.9では動作しません。これは8.2の実装です。

$ cat /home/glcmsd/.config/systemd/user/test.service
[Unit]
Description=Foo

[Service]
ExecStart=/home/glcmsd/test.sh

[Install]
WantedBy=default.target

$ systemctl stop test --user
$ systemctl disable test --user
Removed /home/glcmsd/.config/systemd/user/multi-user.target.wants/test.service.
$ systemctl daemon-reload --user
$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; disabled; vendor preset: enabled)
Active: inactive (dead)

Apr 08 12:10:52 npc027161 systemd[2187]: Started Foo.
Apr 08 13:23:08 npc027161 systemd[2187]: Stopping Foo...
Apr 08 13:23:08 npc027161 systemd[2187]: Stopped Foo.
$ systemctl start test --user
$ systemctl enable test --user
Created symlink /home/glcmsd/.config/systemd/user/default.target.wants/test.service → /home/glcmsd/.config/systemd/user/test.service.
[glcmsd@npc027161 ~]$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 13:24:59 BST; 27s ago
Main PID: 16291 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─16291 /bin/bash /home/glcmsd/test.sh
└─16292 sleep 2h

Apr 08 13:24:59 npc027161 systemd[2187]: Started Foo.
$ sudo reboot
#################################################################################
[glcmsd@npc027161 ~]$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 13:27:16 BST; 5s ago
Main PID: 1798 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─1798 /bin/bash /home/glcmsd/test.sh
└─1801 sleep 2h

Apr 08 13:27:16 npc027161 systemd[1777]: Started Foo.
[glcmsd@npc027161 ~]$

これは7.9と同じ実装です。

-bash-4.2$ cat /home/glcmsd/.config/systemd/user/test.service
[Unit]
Description=Foo
[Service]
ExecStart=/home/glcmsd/test.sh

[Install]
WantedBy=default.target
-bash-4.2$ vi /home/glcmsd/.config/systemd/user/test.service
-bash-4.2$ systemctl stop test --user
-bash-4.2$ systemctl disable test --user
Removed symlink /home/glcmsd/.config/systemd/user/multi-user.target.wants/test.service.
-bash-4.2$ systemctl daemon-reload --user
-bash-4.2$
-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; disabled; vendor preset: enabled)
Active: inactive (dead)
-bash-4.2$ systemctl start test --user
-bash-4.2$ systemctl enable test --user
Created symlink from /home/glcmsd/.config/systemd/user/default.target.wants/test.service to /home/glcmsd/.config/systemd/user/test.service.
-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-08 13:29:46 BST; 20s ago
Main PID: 3369 (test.sh)
CGroup: /user.slice/user-1258074.slice/[email protected]/test.service
├─3369 /bin/bash /home/glcmsd/test.sh
└─3370 sleep 2h
-bash-4.2$ sudo reboot
#################################################################################
-bash-4.2$ systemctl status test --user
● test.service - Foo
Loaded: loaded (/home/glcmsd/.config/systemd/user/test.service; enabled; vendor preset: enabled)
Active: inactive (dead)

EDIT3:今はrhel7.9のユーザーモードでsystemdの使用を放棄します。システムバージョン間にいくつかの違いがあることがわかりました。 Rhel 7.9のシステムは219で、8.2のシステムは239です。 systemd239は2つのサービスを作成してユーザーモードを許可するようです。そのうちの1つは起動遅延を有効にすることです。もう1つはユーザー用のランタイムディレクトリを作成します。 239には実行可能なランタイムディレクトリがありますが、219には存在しないことを確認しました。今何をすべきかわかりません。最後の編集内容が正しくない場合は申し訳ありません。後で追加情報で更新します。

答え1

multi-user.targetシステムのターゲットなので、望むものではないかもしれません。

~からsystemd.special(7):

特殊ユーザーユニット

systemd がユーザーインスタンスとして実行されると、次の特殊ユニットを使用できます。

基本ターゲット
これはユーザーセッションの基本目標であり、デフォルトで開始されます。一般ユーザーセッションを構成するさまざまなサービスをこのターゲットにインポートする必要があります。この点で、default.target はシステムインスタンスの multi-user.target に似ていますが、エイリアスではない実際の単位です。

また、次の単位は、システムの単位と同様に定義されます。exit.target、shutdown.target、sockets.target、timers.target、paths.target、bluetooth.target、printer.target、smartcard.target、sound。ターゲット。

だからあなたはそれに切り替えたいと思いますWantedBy=default.target

関連情報