systemd가 내 데몬을 계속 다시 시작합니다

systemd가 내 데몬을 계속 다시 시작합니다

WiFi/이더넷을 통해 Raspberry Pi를 USB 터널로 사용할 계획이므로 udev를 자동으로 바인딩하고 커널 모듈을 컴파일 및 삽입하는 스크립트를 작성했는데 이제 데몬에 갇히게 되었습니다. 이전 방법은 rc.local에서 데몬이 시작된 이전 시스템에서 제대로 작동했습니다.

내가 추가한 것/etc/systemd/system/usbipd.service:

[Unit]
Description=usbip host daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/sbin/usbipd -D

[Install]
WantedBy=multi-user.target

시스템 로그에서 얻은 내용:

Sep  9 23:47:25 raspi-conn systemd[1]: Started usbip host daemon.
...
Sep  9 23:47:26 raspi-conn systemd[1]: usbipd.service: Succeeded.
Sep  9 23:47:27 raspi-conn systemd[1]: usbipd.service: Scheduled restart job, restart counter is at 1.
...
Sep  9 23:47:27 raspi-conn systemd[1]: Stopped usbip host daemon.
Sep  9 23:47:27 raspi-conn systemd[1]: Started usbip host daemon.
...
Sep  9 23:47:27 raspi-conn usbipd: usbipd: info: starting usbipd (usbip-utils 2.0)
Sep  9 23:47:27 raspi-conn usbipd: usbipd: info: listening on 0.0.0.0:3240
Sep  9 23:47:27 raspi-conn usbipd: usbipd: info: listening on :::3240
Sep  9 23:47:27 raspi-conn usbipd: usbipd: info: shutting down usbipd
Sep  9 23:47:27 raspi-conn systemd[1]: usbipd.service: Succeeded.
...
Sep  9 23:47:27 raspi-conn systemd[1]: usbipd.service: Scheduled restart job, restart counter is at 2.
...
Sep  9 23:47:27 raspi-conn systemd[1]: Stopped usbip host daemon.
...
Sep  9 23:47:27 raspi-conn systemd[1]: Started usbip host daemon.
...
Sep  9 23:47:28 raspi-conn usbipd: usbipd: info: starting usbipd (usbip-utils 2.0)
Sep  9 23:47:28 raspi-conn usbipd: usbipd: info: listening on 0.0.0.0:3240
Sep  9 23:47:28 raspi-conn usbipd: usbipd: info: listening on :::3240
...
Sep 10 08:15:17 raspi-conn systemd[1]: usbipd.service: State 'stop-sigterm' timed out. Killing.
Sep 10 08:15:17 raspi-conn systemd[1]: usbipd.service: Killing process 560 (usbipd) with signal SIGKILL.
Sep 10 08:15:17 raspi-conn systemd[1]: usbipd.service: Failed with result 'timeout'.
Sep 10 08:15:17 raspi-conn systemd[1]: usbipd.service: Scheduled restart job, restart counter is at 3.
Sep 10 08:15:17 raspi-conn systemd[1]: Stopped usbip host daemon.
Sep 10 08:15:17 raspi-conn systemd[1]: Started usbip host daemon.
Sep 10 08:15:17 raspi-conn usbipd: usbipd: info: starting usbipd (usbip-utils 2.0)
Sep 10 08:15:17 raspi-conn usbipd: usbipd: info: listening on 0.0.0.0:3240
Sep 10 08:15:17 raspi-conn usbipd: usbipd: info: listening on :::3240
...
Sep 10 08:16:47 raspi-conn systemd[1]: usbipd.service: State 'stop-sigterm' timed out. Killing.
Sep 10 08:16:47 raspi-conn systemd[1]: usbipd.service: Killing process 1449 (usbipd) with signal SIGKILL.
Sep 10 08:16:47 raspi-conn systemd[1]: usbipd.service: Failed with result 'timeout'.
Sep 10 08:16:47 raspi-conn systemd[1]: usbipd.service: Scheduled restart job, restart counter is at 4.
Sep 10 08:16:47 raspi-conn systemd[1]: Stopped usbip host daemon.
Sep 10 08:16:47 raspi-conn systemd[1]: Started usbip host daemon.
Sep 10 08:16:47 raspi-conn usbipd: usbipd: info: starting usbipd (usbip-utils 2.0)
Sep 10 08:16:47 raspi-conn usbipd: usbipd: info: listening on 0.0.0.0:3240
Sep 10 08:16:47 raspi-conn usbipd: usbipd: info: listening on :::3240
...
Sep 10 08:18:18 raspi-conn systemd[1]: usbipd.service: State 'stop-sigterm' timed out. Killing.
Sep 10 08:18:18 raspi-conn systemd[1]: usbipd.service: Killing process 1482 (usbipd) with signal SIGKILL.
Sep 10 08:18:18 raspi-conn systemd[1]: usbipd.service: Failed with result 'timeout'.
Sep 10 08:18:18 raspi-conn systemd[1]: usbipd.service: Scheduled restart job, restart counter is at 5.
Sep 10 08:18:18 raspi-conn systemd[1]: Stopped usbip host daemon.
Sep 10 08:18:18 raspi-conn systemd[1]: Started usbip host daemon.
Sep 10 08:18:18 raspi-conn usbipd: usbipd: info: starting usbipd (usbip-utils 2.0)
Sep 10 08:18:18 raspi-conn usbipd: usbipd: info: listening on 0.0.0.0:3240
Sep 10 08:18:18 raspi-conn usbipd: usbipd: info: listening on :::3240

나는 시스템 내부에 대한 경험이 많지 않으며 디버깅 방법도 모릅니다. 프로세스가 중지되었다가 다시 시작되는 명확한 이유가 없습니다. systemd가 프로세스 상태를 가져오지 못하는 것 같습니다.

답변1

귀하의 정의가 정의 Type=와 일치 하지 않습니다.ExecStart=

Type=Simple프로그램이 백그라운드로 분기되지 않을 것으로 예상하도록 설정했지만 -D프로세스를 백그라운드로 분기하는 매개변수를 사용합니다.

-D매개변수를 생략 하거나 Type=forking.

저는 첫 번째 옵션을 선호합니다. 왜냐하면 systemd가 로깅을 처리할 수 있기 때문입니다.

관련 정보