web-dev-qa-db-ja.com

systemdのサービスとしてシンボリックリンクを使用できますか?

たとえば、mysshd.serviceディレクトリの下に/usr/lib/systemd/system/という名前のサービスがあります。次のようなシンボリックリンクを作成できますか?

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

そのため、fool.serviceで行った操作はmysshd.servicesystemctl enable/disable start/stop fool.servce)に反映されますか?

私の目的は、自分のsshdサービスのシンボリックリンクでネイティブsshdサービスを上書きすることです。

14
nick

私の知る限り、systemdはこれを特にうまく処理しません。私が理解しているように、あなたはsshd.serviceの動作を上書きしたいですよね?

幸いなことに、systemdはこの種の目的のために設計されています。サービス定義を/etc/systemd/system/ssh.serviceに配置し、systemctl daemon-reloadを実行してユニットファイルを再読み込みするだけで、systemdはシステムssh.serviceではなくその構成を自動的に使用します。

systemctl enable mysshd.serviceも機能させたいですか?問題ない。ユニットファイルの[Install]セクションに、Alias=mysshd.serviceを示す行を追加します。次に、systemctl reenable ssh.serviceを実行して、systemdでユニットのシンボリックリンクを修正します。

さて、あなたはmysshd.serviceが何をすべきかについての詳細を与えていません。それが通常のssh.serviceと完全に異なる場合は、すばらしいです!上記の方法を使用します。ただし、1つの小さなことだけを変更したい場合は、間違ったアプローチを使用しています。 systemdを使用すると、通常のユニットファイルの上に適用されるユニットファイルの「スニペット」を作成できます。これにより、ユニットファイルの残りの部分がパッケージマネージャーから更新を受信できるようにしながら、個々のディレクティブを追加またはオーバーライドできます。これを行うには、単に/etc/systemd/system/ssh.d/my-custom-config.confを作成します(my-custom-config.confを任意に変更できます。また、複数のオーバーライドファイルを使用することもできます)。そのファイルに、変更または通常のssh.serviceに追加するディレクティブを配置します。 Alias=ディレクティブを追加して、systemctl start mysshd.serviceが機能するようにすることもできます。終わったらsystemctl daemon-reloadを実行することを忘れないでください(そして、Alias=を使用した場合は、systemctl reenable ssh.service)。

余談ですが、決してeversystemdユニットファイルを/usr/lib/systemdで変更してください。今まで!ファイルシステム階層標準 必須/usrは読み取り専用として扱われます。実際には、これはパッケージマネージャーが/usr/usr/localを除く)を処理することを意味し、特に変更したものが最終的に上書きされるため、パッケージマネージャーが処理する内容には触れません。代わりに、/etcなどの場所にコンテンツを配置してください。

10
strugee

フルパスでlinkを使用します:

systemctl link /home/nick/myservice.service

それ自体がすでにリンクになっているサービスファイルをリンクすることはできません。

6
Gunar Gessner

シンボリックリンク 以前は不可能でした 。しかし、それらは今日現在のものです。

2
mlissner