起動時にシステムが自動的に起動されるようにするいくつかの簡単なデーモンプロセスを作成しました。私のデーモンはデータ出力のためにBluetoothデーモンとUNIXソケットを起動する必要があります。 systemdのほとんどのマニュアルとチュートリアルで読むことができるものとは少し異なりますが、デーモンの観点から私はsystemdがリスニングするのではなく書き込み用のソケットを作成したいと思います。サービスとソケットを手動で起動すると、すべてがうまく機能しますが、この操作を実行した後に再起動systemctl enable foo.service
後にデーモンは起動しません。その内容とグーグルに基づいてman systemd.unit
3man systemd.target
つのユニットファイルを作成しました。
systemdの依存関係を説明する方法が少なくともいくつかあるようなので、何が間違っているのか、再起動後にサービスが自動的に起動しない理由はわかりません。 foo.targetファイルを生成する必要がありますか、それともこの単純な場合には必要ありませんか?また、WantedBy
foo.socketをfoo.targetに設定する必要があるのか、Sockets.targetに設定する必要があるのかわかりません。
以下は3つのユニットファイルのコードスニペットです。誰でも一度見てアドバイスをいただきありがとうございます。
############ foo.service file #############################################
[Unit]
Description=Foo Service
Requires=foo.socket
[Service]
Type=simple
ExecStart=/path/to/start
[Install]
WantedBy=foo.target
###########################################################################
############ foo.socket file ##############################################
[Unit]
Description=Foo socket for write, not for listen
[Socket]
ListenDatagram=/run/foo/foo.sk
[Install]
WantedBy=foo.target
###########################################################################
############ foo.target file ##############################################
[Unit]
Description=Foo target
Requires=bluetooth.target
###########################################################################
答え1
systemd
ターゲットの起動時にサービスとソケットを起動する必要があることを指示しましたが、起動時にターゲットを起動してはいけないことを指定しませんでした。部品がない[Install]
ため、起動時にサービスが開始されません。
この単純なケースでは、ターゲットは必要ありません。Requires=
条件をターゲットからサービスに移動します。
WantedBy=
お客様のサービスについては、お試しくださいmulti-user.target
。サービスにネットワークが必要な場合は、を使用してくださいnetwork-online.target
。