
[email protected]
サーバーのすべてのユーザーが起動できるシステムがあります。systemd --user start [email protected]
ルートとしてメンテナンスを実行しながら、すべてのユーザーのサービスを停止したいと思います。
私は対立を通しても体系化された人間から道を見つけることができませんでした。 rootでユーザーサービスを停止する方法はありますか?
答え1
--user
ルートとして、systemdはフラグの組み合わせを使用してユーザーサービスに対するアクションの実行をサポートします--machine
。
例えば
systemctl --user --machine=<user>@.host <command> <service>
または(localhostから)に短縮できます。
systemctl --user --machine=<user>@ <command> <service>
つまり
systemctl --user --machine=jtingiris@ stop a-user.service
この内容は次のように記録されます。man 1 systemctl
...
-M
、--machine=
ローカルコンテナでアクションを実行します。接続するコンテナの名前を指定します。オプションで、接続する
@
ユーザー名と区切り文字「」が前に付けられます。コンテナ名の代わりに特別な文字列 ".host
"を使用すると、ローカルシステムへの接続が確立されます(これは特定のユーザーのユーザーバスに接続するのに役立ちます: " ")。構文を使用しないと、rootユーザーとして接続されます。構文を使用している場合は、左側または右側のいずれか(両方ではない)を省略できます。この場合、ローカルユーザー名と ""は暗黙的に表示されます。--user [email protected]
@
@
.host
答え2
@Joseph Tingirisの投稿は私には適していません。 「リモートでユーザーインスタンスにアクセスできません」というメッセージが表示され続けます。
解決策はrunuser
ルートIDを使用することです。
runuser -l userNameHere -c 'systemctl --user stop user-service.service'
編集する:言うのを忘れました。これは以下にも当てはまります。
su - userNameHere -c 'systemctl --user stop user-service.service'
ただし、これはすべてユーザーが実際にログインしている場合にのみ機能します(直接端末、GUI、またはSSH経由)。