다음과 같은 서비스가 있습니다.
/etc/systemd/system/Detectwifi.service
[Unit]
Description=wifi detect automation
Requires=wpa_supplicant.service
After=wpa_supplicant.service
[Service]
Type=simple
ExecStart=/sbin/wpa_cli -a /home/pi/test.sh -B
Restart=always
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
그런 다음 서비스를 시작하면 명령이 wpa_cli -a /home/pi/test.sh -B
실행되는 것을 볼 수 있습니다. 그런 다음 프로세스를 종료하면 다시 시작되지 않습니다.
다시 시작해도 작동하지 않는 이유를 알 수 있나요?
또한 해당 줄에 주석을 달면 RemainAfterExit=yes
서비스가 다시 시작되지만 프로세스가 성공적으로 실행되더라도 계속 다시 시작됩니다.
답변1
-B
프로그램에 언급되지 않은 준비 프로토콜을 유지 하고 전환하라는 제안은 리뷰 답변에 대해 항상 매우 회의적이어야 하는 이유에 대한 또 다른 예입니다.
RemainAfterExit=yes
여기처럼 거짓말일 때는 사용하지 마세요. 당신의 데몬아니요프로세스가 종료되면 실행 중인 것으로 간주됩니다.- 사용하지 마세요
-B
. 어쨌든 데몬 아이디어는 오류이며 프로세스는이미 시작했어데몬 컨텍스트에서.
wpa_supplicant
당신이 직면하게 될 한 가지 문제는 문제의 서비스가 제어 소켓을 바인딩할 때까지 서비스가 실행되어서는 안 된다는 것을 systemd가 모른다는 것입니다 /run/wpa_supplicant/
. 여기에는 타이밍 문제가 있으며 서비스가 "수락할 때까지 계속 다시 시작됩니다." " 그것.
wpa_supplicant
제어 소켓을 열린 파일 설명자로 전달하는 방법은 아직 제공되지 않았습니다. 이를 통해 시스템 소켓 장치를 사용하여 정의할 수 있으며 wpa_cli
그 뒤에 서비스 장치와 함께 주문할 수 있습니다.
추가 읽기
- 조나단 드보인 폴라드(2001). Unix 데몬을 설계할 때 피해야 할 실수. 자주 주어지는 답변입니다.
- 조나단 데보인 폴라드(2015).실제로 데몬이 필요하지 않습니다. 진짜.. 체계화된 공포의 집.
- 조나단 데보인 폴라드(2015).Unix 데몬의 준비 프로토콜 문제. 자주 주어지는 답변입니다.
- 치라그 나타라지(2019). systemd를 사용한 간단한 무선 네트워킹. chiraag.nataraj.us.
- https://unix.stackexchange.com/a/401611/5132