すべてのユーザーに対してsystemdユーザーサービスをインストールして有効にします。

すべてのユーザーに対してsystemdユーザーサービスをインストールして有効にします。

目的:すべてのユーザーが起動できるシステムサービスをインストールします。問題は、ユーザーサービスをsudoインストール(使用)する手順で有効にする(いいえ)ことですsudo

にサービスファイルを入れました/etc/systemd/user/。これは必須ですsudo

それではsudo systemctl --user enable my_serviceうまくいきません。スーパーユーザーはユーザーのためにサービスを有効にすることはできず、ユーザーだけがそうすることができます。

sudo make install問題:このサービスを私のプロジェクトの一部としてインストールしたいと思います。sudoサービスファイルをコピーするためにここに必要です/etc/systemd/user/。このインストール段階では、ユーザーサービスも有効にして、ユーザーがアクティブ化せずに起動できるようにしたいと思います。

私が考えることができる解決策は次のとおりです。

  • その後、インストーラは追加のアクティベーションステップを実行する必要があります(Sudoなし)sudo make install
  • インストールステップの一部としてアクティブ化ステップを実行し、sudo -E -u $USER systemctl....requiredを使用して-E到達しますDBUS_SESSION_BUS_ADDRESS(ユーザーのsystemctlに必要です)。問題はインストールコマンドも必要であることですが-E -u $USER、これは異例です。
  • 失敗すると、ユーザーにenableサービスを実行するように求められます。start
  • どういうわけかそのステップに対する権限を放棄しますenable。方法がわからない。

これが一般的なユースケースになるはずです。人々は通常この問題をどのように解決しますか?

ベストアンサー1

すべてのユーザーのためのsystemdユーザーサービスのインストール

すべてのユーザーにsystemdユーザーサービスをインストールするには、以下にリストされているフォルダーの.service1つにユニットファイルを配置するだけです。ユーザー単位の検索パス存在するman systemd.unit(5)。重要なことは:

  • /etc/systemd/user/*(通常はシステム管理者が使用するように設計されています)
  • /usr/lib/systemd/user/*(通常インストールされているパッケージで使用されることが予想されます)

sudoこれらのサービスファイルをこれらのフォルダにインストールするには、通常/ root権限が必要です。

すべてのユーザーに対してシステムユーザーサービスを有効にする

すべてのユーザーに対してサービスを有効にするには、/root権限を必要とする--globalwithなどのsystemctlフラグを使用できます。systemctl --global enablesudo

--global

有効化と無効化とともに使用すると、グローバルユーザー設定ディレクトリで機能し、すべてのユーザーの将来のすべてのログインに対してグローバルにデバイスファイルを有効または無効にします。

からインポートman systemctl(1)

systemctl preset代わりに使用systemctl enable

使用を検討することもできます。systemctl preset変えるsystemctl enablesystemctl enableない限りと同じように機能します。システム基本ファイルdisable my-service.serviceこの場合、交換されますという行がありますsystemctl disable

これにより、ユーザー/管理者はサービスを自動的に有効にするかどうかを決定できます。たとえば、Fedoraにはdisable *デフォルト値があるため、Fedoraのすべてのシステムサービスはいいえインストール中はデフォルトで有効になります。


しかし、通常、systemdサービスはプロジェクトのMakefileではなく、パッケージマネージャによってインストール/アクティブ化されます。

たとえば、.debDebian / Ubuntu用のサービスファイルをすでに作成している場合、systemdユーザーサービスファイルを追加して有効にすることは、sudo apt install ./my-debパッケージに名前付きファイルを作成するのと同じくらい簡単です。debian/my-package.user.serviceそれからdh_installsystemduserパッケージをインストールすると、自動的にインストールとアクティブ化、およびアンインストール/非アクティブ化も処理されます。

おすすめ記事