たとえば、mysshd.service
ディレクトリの下に/usr/lib/systemd/system/
という名前のサービスがあります。次のようなシンボリックリンクを作成できますか?
ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service
そのため、fool.serviceで行った操作はmysshd.service
(systemctl enable/disable start/stop fool.servce
)に反映されますか?
私の目的は、自分のsshdサービスのシンボリックリンクでネイティブsshdサービスを上書きすることです。
私の知る限り、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
などの場所にコンテンツを配置してください。
フルパスでlink
を使用します:
systemctl link /home/nick/myservice.service
それ自体がすでにリンクになっているサービスファイルをリンクすることはできません。
シンボリックリンク 以前は不可能でした 。しかし、それらは今日現在のものです。