부팅 시 시스템이 자동으로 시작되도록 하는 몇 가지 간단한 데몬 프로세스를 작성했습니다. 내 데몬은 데이터 출력을 위해 블루투스 데몬과 UNIX 소켓을 시작해야 합니다. systemd에 대한 대부분의 매뉴얼과 튜토리얼에서 읽을 수 있는 것과는 약간 다르지만, 데몬의 관점에서 나는 systemd가 듣기보다는 쓰기를 위한 소켓을 만들기를 원합니다. 서비스와 소켓을 수동으로 시작하면 모든 것이 잘 작동하지만 이 작업을 실행한 후 systemctl enable foo.service
재부팅 후에 데몬이 시작되지 않습니다. 그 내용과 구글링을 바탕으로 man systemd.unit
3 man 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
.