目的:すべてのユーザーが起動できるシステムサービスをインストールします。問題は、ユーザーサービスを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ユーザーサービスをインストールするには、以下にリストされているフォルダーの.service
1つにユニットファイルを配置するだけです。ユーザー単位の検索パス存在するman systemd.unit(5)
。重要なことは:
/etc/systemd/user/*
(通常はシステム管理者が使用するように設計されています)/usr/lib/systemd/user/*
(通常インストールされているパッケージで使用されることが予想されます)
sudo
これらのサービスファイルをこれらのフォルダにインストールするには、通常/ root権限が必要です。
すべてのユーザーに対してシステムユーザーサービスを有効にする
すべてのユーザーに対してサービスを有効にするには、/root権限を必要とする--global
withなどのsystemctlフラグを使用できます。systemctl --global enable
sudo
--global
有効化と無効化とともに使用すると、グローバルユーザー設定ディレクトリで機能し、すべてのユーザーの将来のすべてのログインに対してグローバルにデバイスファイルを有効または無効にします。
からインポート
man systemctl(1)
systemctl preset
代わりに使用systemctl enable
使用を検討することもできます。systemctl preset
変えるsystemctl enable
。systemctl enable
ない限りと同じように機能します。システム基本ファイルdisable my-service.service
この場合、交換されますという行がありますsystemctl disable
。
これにより、ユーザー/管理者はサービスを自動的に有効にするかどうかを決定できます。たとえば、Fedoraにはdisable *
デフォルト値があるため、Fedoraのすべてのシステムサービスはいいえインストール中はデフォルトで有効になります。
しかし、通常、systemdサービスはプロジェクトのMakefileではなく、パッケージマネージャによってインストール/アクティブ化されます。
たとえば、.deb
Debian / Ubuntu用のサービスファイルをすでに作成している場合、systemdユーザーサービスファイルを追加して有効にすることは、sudo apt install ./my-deb
パッケージに名前付きファイルを作成するのと同じくらい簡単です。debian/my-package.user.service
それからdh_installsystemduser
パッケージをインストールすると、自動的にインストールとアクティブ化、およびアンインストール/非アクティブ化も処理されます。