他のユーザーのsystemdユニットを管理する


10

1人のユーザー、またはおそらくrootが別のユーザーのユーザーレベルのsystemdサービスを制御できますか?

私は試しましたがsudo -u <some user> systemctl --user restart <some service>、それはdbusについて不満を言いFailed to get D-Bus connection: Connection refusedます:。

回答:


4

私のgentooボックスにssh経由でリモートでログインしたときにも同じ問題が発生しました。私の場合、これはXDG_RUNTIME_DIRおよびDBUS_SESSION_BUS_ADDRESS環境変数が欠落していたためです。次のコマンドを実行して、再試行してください。

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

これが役立つ場合は、それらのコマンドを.bashrcに入れることができます。.bashrcよりもエレガントな解決策があるはずですが、それはディストリビューションによって異なります。

ここで私はその解決策を見つけました。

編集:

rootとしてログインすると、次のようにsystemctl --user別のユーザーとして正常に実行できましたsu

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

またはを使用してsudo(注意、それぞれのユーザーUID(1000)をパス '/ run / user /'に明示的に追加する必要がありましたが、bashスクリプトから実行している場合は、代わりに$ SUDO_UIDを使用できます):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

1
私はまさにそれを持ってい/etc/profile.d/dbus.shます。sudoデフォルトで環境をクリアするため、ホワイトリストに登録する必要があると思います。ただし、現在のユーザーのランタイムディレクトリを転送するだけかどうかはわかりません。
mkaito 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.