SystemdがBluetoothサービスを見つけることができません

SystemdがBluetoothサービスを見つけることができません

カーネル5.15.28-1でManjaroを使用します。

私の問題はBluetoothに関連しています。私はbluez 5.61-1を使用しています(5.63-2でダウングレードしました)。

systemctlを使用してBluetoothを有効にできますが、私が作成したsystemdサービスでは有効にすることはできません。

#/etc/systemd/system/bt-restart.service

 [Unit]
 Description=restart bt and connect keypad

 [Service]
 Type=oneshot
 User=root

 RemainAfterExit=yes

 ExecStart=/usr/bin/sleep 1
 ExecStart=-/usr/lib/systemd/system/bluetooth
 ExecStart=/usr/bin/sleep 3
 ExecStart=/home/jcw/bin/enable-bt.sh

 [Install]
 WantedBy=multi-user.target

出力は以下から来ます。

sudo systemctl ステータス bt-restart

● bt-restart.service - restart bt and connect keypad
     Loaded: loaded (/etc/systemd/system/bt-restart.service; enabled; vendor preset: disabled)
     Active: active (exited) since Sat 2022-03-19 09:00:35 CET; 1h 27min ago
    Process: 2762 ExecStart=/usr/bin/sleep 1 (code=exited, status=0/SUCCESS)
    Process: 2763 ExecStart=/usr/lib/systemd/system/bluetooth (code=exited, status=0/SUCCESS)
    Process: 2764 ExecStart=/usr/bin/sleep 3 (code=exited, status=0/SUCCESS)
    Process: 2766 ExecStart=/home/jcw/bin/enable-bt.sh (code=exited, status=0/SUCCESS)
   Main PID: 2766 (code=exited, status=0/SUCCESS)
        CPU: 41ms

mars 19 08:59:50 jcw-k30amjafk31amj systemd[1]: Starting restart bt and connect keypad...
mars 19 08:59:51 jcw-k30amjafk31amj systemd[2763]: bt-restart.service: Executable /usr/lib/systemd/system/bluetooth missing,>
mars 19 09:00:35 jcw-k30amjafk31amj enable-bt.sh[2767]: Attempting to connect to 2B:24:13:DB:7C:99
mars 19 09:00:35 jcw-k30amjafk31amj enable-bt.sh[2767]: Failed to connect: org.bluez.Error.Failed
mars 19 09:00:35 jcw-k30amjafk31amj systemd[1]: Finished restart bt and connect keypad.

ご覧のとおり実行可能ファイル/usr/lib/systemd/system/bluetoothがありません。、systemdがbluetooth.serviceを見つけられませんでした。

しかし、ファイルが存在します。 systemctlを介してアクセスできます。だから何?

編集:2行目は、「実行ファイル/usr/lib/systemd/system/bluetoothがありません。スキップ中:そのファイルまたはディレクトリがありません」で終わります。

ベストアンサー1

ディレクトリには実行可能ファイルがあってはなりません/usr/lib/systemd/system/

があるかもしれませんが、/usr/lib/systemd/system/bluetooth.service実行可能ファイルではありません。自分の/etc/systemd/system/bt-restart.service

.serviceコマンドではサフィックスを省略できますが、定義ではサフィックスをsystemctl省略できないため意味がありません。指定してもこの方法ではファイルを起動できません。ExecStart=ExecStart=-/usr/lib/systemd/system/bluetooth.../bluetooth.service.service

bt-restart.serviceプログラムをbluetooth.service実行時にのみ使用できるようにするには、次の[Unit]セクションに2行を追加する必要がありますbt-restart.service

Wants=bluetooth.service
After=bluetooth.service

つまり、「を実行する必要がありbt-restart.serviceますbluetooth.service(ただし、起動に失敗してもシステムがリカバリモードでクラッシュしてはいけません)、bt-restart.service実行する必要があります。後ろに bluetooth.service始まった。 」

ExecStart=-/usr/lib/systemd/system/bluetoothその場合、この行はまったく必要ありません。

必要な特定の動作に応じて、BindsTo=またはPartOf=代わりに使用する必要がありますWants=

特に欲しいならbluetooth.service実行している場合は、常に停止して再起動してください。yoursでは、bt-restart.service次のように置き換える必要がありますExecStart=-/usr/lib/systemd/system/bluetooth

ExecStart=/bin/systemctl restart bluetooth.service

enable-bt.shただし、起動または再起動するたびにスクリプトを実行することが目標である場合は、bluetooth.service次の組み合わせを使用してください。

PartOf=bluetooth.service
After=bluetooth.service

仕事をしなければなりません。

おすすめ記事