Systemd는 내 서비스에 대해 After 및 Requires를 무시합니다.

Systemd는 내 서비스에 대해 After 및 Requires를 무시합니다.

블루투스 서버 애플리케이션을 실행하는 서비스를 만들고 다음과 같이 시작했습니다.

[Unit]
After=bluetooth.service
Requires=bluetooth.service

[Service]
Type=simple
ExecStartPre=/usr/bin/sdptool add SP
ExecStartPre=/bin/sleep 0.5
ExecStartPre=/bin/hciconfig hci0 piscan
ExecStart=/usr/local/bin/my-service.py
ExecStartPost=/usr/bin/bluetoothctl discoverable on
Restart=always
RestartSec=15

[Install]
WantedBy=multi-user.target

시스템 부팅 후 이 장치에 대한 로그를 보면 항상 첫 번째 부팅은 실패하고 두 번째 부팅은 성공하는 것을 볼 수 있습니다. 전체 로그를 보면 내 서비스가 먼저 시작된 다음 실패하고 나중에 Bluetooth 서비스만 시작되는 것을 볼 수 있습니다. 그 후 서비스를 다시 시도했는데 필요한 종속성이 있었습니다.

Systemd가 내 서비스에서 및 옵션을 무시하는 이유는 무엇입니까 After?Requires

나는 내 작업을 수행하기 위해 정확히 이러한 옵션을 사용하도록 제안하는 다른 웹 텍스트, 매뉴얼 페이지 및 질문을 여기에서 읽었습니다. 그러나 이것은 나에게 효과가 없습니다.

장치는 Raspbian OS, Linux 커널 5.4.51 및 Systemd 241을 갖춘 Raspberry Pi 3B+입니다.

답변1

bluez의 bluetooth.service에는 몇 가지 특이한 점이 있는 것 같습니다(이 질문을 봤어요). 나는 그 이유를 완전히 이해하지 못합니다. 그러나 WantedBy서비스를 multi-user.target에서 bluetooth.target으로 변경하면 문제가 해결되었습니다.

[Install]
WantedBy=bluetooth.target

관련 정보