Systemdで「リンクされた」ユニットファイルを有効にする


10

私はまだsystemdに慣れていて、何かに遭遇しました。それはそれほど問題ではありませんが、私はこれがどのようにあるかについてもっと知りたいです。他の場所でこれへの参照を見つけることができませんでした。

まず、サービスのカスタムユニットファイルをに入れる必要があることを理解しています/etc/systemd/system。ただし、ユニットファイルを他の場所に置くことができれば、サーバーの管理には便利です。

ドキュメントでは、ユニットファイルを次のように「リンク」できることがわかりました。

systemctl link /path/to/servicename.service

これにより、上の上記へのリンクが作成され/etc/systemd/systemます。これで、このサービスを開始/停止できます。表面的には、これはサービスを管理するための良い方法のように思えました。

ただし、このような「リンクされた」ユニットファイルを有効にしようとすると、失敗します。

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

まったく同じユニットファイルを使用しますが、/etc/systemd/systemリンクではなくにコピーすると、次のようになります。

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

このことから、リンクされたユニットファイルをシステムの起動時に呼び出せるようにすることはできないようです。

これが事実である場合、「リンク」機能のポイントは何ですか?ドキュメントから、それは言う:

ファイル名をリンク

ユニットファイル検索パスにないユニットファイルをユニットファイル検索パスにリンクします。これには、ユニットファイルへの絶対パスが必要です。この効果は、無効にすると元に戻すことができます。このコマンドの効果は、ユニット検索パスに直接インストールされていなくても、ユニットファイルを起動およびその他のコマンドで使用できることです。

回答:


13

マニュアルページは誤解を招くものです。

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

最初はあなたがすることを可能にしますsystemctl start myservice。2つ目は、myserviceが自動的に起動することを可能にします(@Julienが指摘したように、自動的にが追加されますlink)。

と思うと、一日中頭を抱えている。


1
systemctl enableも実行systemctl linkするので、2つのコマンドを入力する必要がないことに注意してください;-)
Julien

@Julienああ、私が去年私がこれを書いたときに私たちがどこにいるのか:-)私はついにそれを先月実現したと思います!
Auspex

9

デフォルトパス以外のパスからサービスを有効にする場合は、フルパスを使用する必要があります。有効にすると、リンクも作成されます。

systemctl enable /root/myservice.service

有効にすると、サービス名で開始/停止/ステータスを設定できます

systemctl start myservice

ここにいくつかの警告があります:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.