.service
ファイルをに入れてこれを実行したいと思います/etc/systemd/system
。私のソース.service
ファイルは/opt/something.service
。
インストールには2つのオプションがあります。
cp /opt/something.service /etc/systemd/system
ln -s /opt/something.service /etc/systemd/system
start
サービスを操作するenable
と、両方の方法が機能します(サービスが正常に動作します)。
ただし、サービスを無効にすると、次の違いがあります。
- コピーの場合、
/etc/systemd/system/something.service
まだ - リンクの場合は
/etc/systemd/system/something.service
削除されます。
これは意図的に設計されていますか?リンクを介して生成されたサービスを無効にした後は、これだけでは不十分なので、これは非常に迷惑です。enable
サービスユニットも再生成する必要があります。
答え1
はい、これは意図的に設計されています。
マニュアルページには次のようsystemctl disable
に記載されています。
1 つ以上のデバイスを無効にします。これにより、デバイス設定ディレクトリから指定されたデバイスファイルへのすべてのシンボリックリンクが削除され、アクティブ化による変更がキャンセルされます。ただし、これは実際に生成されたシンボリックリンクのみをアクティブにするのではなく、ユニットファイルへのすべてのシンボリックリンク(つまり手動で追加されたシンボリックリンクを含む)を削除します。
これへのリンクは次のとおりです。https://www.freedesktop.org/software/systemd/man/systemctl.html#
systemctl enable
理由は説明しませんが、ユニットファイルへのリンクを見つけるため、を使用して作成されたリンクと手動で生成されたリンクを区別できないと推測できます。
link
systemctlのオプションは、systemd検索パス以外のソースファイルへのシンボリックリンクを作成するときに使用する必要があります。また、同じマニュアルページから。
リンクファイル名...
ユニットファイル検索パスにないユニットファイルをユニットファイル検索パスに関連付けます。これには、ユニットファイルの絶対パスが必要です。この効果は無効にしてキャンセルできます。このコマンドの効果は、デバイスファイルがデバイス検索パスに直接インストールされるわけではありませんが、起動やその他のコマンドで使用できることです。
答え2
どのディストリビューションを使用しているのかわかりませんが、RHEL 7から始めます(これが私が使用しているディストリビューションであり、似ている必要があるためです)。
systemd
/usr/lib/systemd/system/*.service
通常、次のサービスファイルを探します(配布版への他のサービスリンクを確認できます)
サービスを有効にするには適切なセクションが必要です。インストール[install]
セクションの内側にはタブが必要ですWantedBy=
。これはWantedBy
、アクティブにする必要がある条件(ランレベルなど)を指定します。WantedBy
のディレクトリと一致する必要があります/etc/systemd/system/*.target.wants
。
/etc/systemd/system/*.target.wants/
その後、サービスを有効にすると、そのサービスを指すリンクが作成されます/usr/lib/systemd/system/
。サービスを無効にすると、リンクも削除されます。
たとえば、次を含むサービスファイル(test.service)がある場合:
[install]
WantedBy=multi-user.target
それから:
systemctl enable test.service
内部にリンクが作成されます。
/etc/systemd/system/multi-user.target.wants/
test.service
ポインティングと呼ばれる/usr/lib/systemd/system/test.service
サービスを無効にすると、リンクのみが削除されます。
答え3
サービスへのリンクが有効になっている必要があります。フォルダの目的はスクリプトを保存するのではなく、サービスを無効または有効にすることであるため、実際のファイルを持つことは悪い習慣です。
答え4
1つの回避策は、シンボリックリンクされたディレクトリを削除しないsystemdを使用することです。
システムリンクの場合:/usr/local/lib/systemd/system/
ユーザーリンクの場合: ~/.config/systemd/user.control
または/usr/local/lib/systemd/user/
シンボリックリンクを上記のディレクトリに配置します。systemctl disable
以下はsystemctl enable
期待どおりに機能します。