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サービスをオーバーライドすることです。
答え1
link
絶対パスで使用:
systemctl link /home/nick/myservice.service
すでにリンクされているファイルにはリンクできません。
答え2
私が知る限り、systemdはこれをうまく処理しません。私が理解したところによると、あなたはその行動を無視したいと思いますsshd.service
。そうですか?
幸いなことに、systemdはこの種の作業のために設計されています。サービス定義をに入れて/etc/systemd/system/ssh.service
実行してsystemctl daemon-reload
ユニットファイルを再ロードすると、systemdは自動的にsystemの代わりにその設定を使用しますssh.service
。
あなたもsystemctl enable mysshd.service
就職したいですか?大丈夫です。[Install]
ユニットファイルセクションに次の行を追加してsystemdにユニットシンボリックリンクを変更するように指示するAlias=mysshd.service
と、systemctl reenable ssh.service
完了します。
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
さて、絶対に、一度/usr/lib/systemd
システム単位のファイルを変更してみてください!ファイルシステム階層標準必要/usr
読み取り専用として扱われます。実際には、パッケージマネージャが処理し/usr
(除く/usr/local
)、パッケージマネージャが処理するものは、ユーザーが触れないことを意味します。特に変更が最終的に上書きされる可能性があるためです。代わりに、同様の場所に物を置きます/etc
。
答え3
シンボリックリンク以前は不可能。でも今日はそう始まるんですね。
答え4
他の人がこの質問に答えましたが、ユーザーのホームディレクトリにあるユニットへのシンボリックリンクを作成できないことを指摘した人はいません。彼らはそれの外に住むべきです。 rootが所有し、644権限で構成されていても機能しません。 /homeの外側にある必要があります。
@evandrixは--userフラグを使用できると指摘しました。そのプロセスはそれよりも複雑です。 「--user」は、ユーザーディレクトリで有効になっているシステムデバイスにのみ適用できます。これにより、ユーザーは --system ドメイン外で自分のサービスを制御できます。特定のバージョンのsystemd(2.37以降を除いて、どのバージョンが私に役立つのか忘れました)だけが--userドメインを使用します。この記事を読むことをお勧めします。
https://nts.strzibny.name/systemd-user-services/
さらに、このアーチページは素晴らしい情報を提供します:
https://wiki.archlinux.org/title/systemd/User
これを行う方法の簡単な分析:
- ユーザーアカウントにはパスワードが必要です。アカウントにパスワードがないと機能しません。
ps -aux | grep systemd
特定のユーザーに対して「/usr/lib/systemd/systemd --user」と表示する必要があります。このサービスは、ユーザーが初めてログインしたときにpam.dによって開始されます。- /home/YourUserName/.config/systemd/user/ ディレクトリが存在しますか?もしそうなら、ユニットファイルをそこに入れてください。作成されない場合は、ユニットをそこに置きます。
- ログアウトしてから上記のディレクトリにデバイスを移動し、もう一度ログインしてください。
- このコマンドを実行
$ systemctl --user enable myuser.service
$ systemctl --user daemon-reload
これで、すべてのsystemctlコマンドをuserとして実行できるようになりますが、--userフラグを含める必要があります。
$ systemctl --user status myuser.service
$ systemctl --user start myuser.service
$ systemctl --user restart myuser.service
$ systemctl --user stop myuser.service
デバイスの[サービス]セクションで、[ユーザー]と[グループ]の設定を適切に設定する必要があります。また、--userを使用している場合はsystemctl link myuser.service
システムドメインでのみ機能するため、使用しないでください。ユーザーのシンボリックリンクは実行時に構築され、次にリンクさsystemctl --user enable myuser.service
れます。/home/YourUserName/.config/systemd/user/multi-user.target.wants/