시작 시 데몬의 시스템 단위 파일이 작동하지 않습니다.

시작 시 데몬의 시스템 단위 파일이 작동하지 않습니다.

Raspberry Pi 모델 B transmission-daemon로 부팅 하려고 합니다 . systemd이제 데몬을 중지하고 시작할 수 있지만 systemctl시작 시 자동 시작이 아직 제대로 작동하지 않습니다.

유닛 파일을 만들었습니다 /etc/systemd/system/transmission.service.

[Unit]
Description=Transmission daemon
Requires=network.target

[Service]
Type=forked
User=pi
ExecStart=/usr/bin/transmission-daemon -f

[Install]
WantedBy=multi-user.target

다음을 사용하여 서비스를 활성화했습니다.

sudo systemctl enable transmission.service

불행히도... 재부팅하는 것은 재미가 없습니다. 그러나 수동으로 시작하면 작동합니다.

sudo systemctl start transmission.service

내가 뭘 잘못했나요? 저는 최신 Raspbian Jessie를 사용하고 있습니다.

편집(2015/10/16)

ps aux및 의 출력 에 따르면 systemctl status transmission.service데몬이 실행 중입니다. 그러나 웹 인터페이스에 액세스할 수 없습니다. 실행 중인 데몬 인스턴스를 중지하고 수동으로 다시 시작하면 웹 인터페이스에 액세스할 수 있습니다.

요청에 따라 Pi를 재부팅한 후의 출력은 다음과 같습니다 ps aux.netstat

https://dl.dropboxusercontent.com/u/29638164/ps_before.txt https://dl.dropboxusercontent.com/u/29638164/netstat_before.txt

다음은 데몬을 수동으로 다시 시작한 후의 동일한 출력입니다.

https://dl.dropboxusercontent.com/u/29638164/ps_after.txt https://dl.dropboxusercontent.com/u/29638164/netstat_after.txt

사용하여:

$ killall transmission-daemon
$ sudo systemctl start transmission.service

답변1

Requires=network.targetsystemd서비스가 어떤 시점에서는 활성 네트워크 연결이 필요하다는 것을 알려줍니다 .이 서비스만 시작하도록 지정되어 있지 않습니다.뒤쪽에네트워크가 시작되었습니다.

(예, 서비스가 실행되는 동안 네트워크 인터페이스 표시, 재구성 및/또는 사라지는 것을 처리할 수 있는 서비스가 있습니다. 이러한 서비스의 Requires=network.target경우 잘 작동합니다. 현대 사회에서는 핫플러그와 IPv6가 점점 더 보편화되고 있습니다. 서비스는 이와 같아야합니다).

매뉴얼 페이지 에서 systemd.unit(5)(강조):

수요 종속성은 서비스가 시작되거나 중지되는 순서에 영향을 미치지 않습니다. 이는 After=또는 옵션을 사용하여 독립적으로 구성해야 합니다 Before= . 장치에 다음 foo.service과 같이 구성된 장치가 필요하고 순서가 사용되거나 구성되지 않은 경우bar.serviceRequires=After=Before=두 장치가 동시에 시작됩니다foo.service활성화되면 둘 사이에 지연이 없습니다. 실패한 서비스를 처리할 때 Wants=보다 강력한 시스템을 구현하려면 대신 를 사용하는 것이 더 나은 선택인 경우가 많습니다.Requires=

네트워크가 가동되고 모든 인터페이스에 IP 주소가 부여된 후에만 서비스가 시작되도록 지정하려면 다음을 수행해야 합니다.

Wants=network-online.target
After=network-online.target

systemd.special(7)매뉴얼 페이지 에서 :

network-online.target

네트워크 연결을 엄격하게 구성해야 하는 장치는 유형 종속성을 network-online.target통해 가져오고 Wants=그 후에 스스로 정렬해야 합니다. 이 대상 장치는 네트워크가 충분히 구축될 때까지 추가 실행을 연기하는 서비스를 가져오도록 설계되었습니다. 구체적으로 필요한 것은 네트워크 관리 서비스의 구현에 달려 있습니다.

답변2

네트워크 인터페이스가 아직 IP 주소를 얻지 못했기 때문에 전송 데몬이 포트를 바인딩할 수 없습니다. IP 주소가 192.168.xxx.xxx라고 가정하면 다음 명령을 사용하여 Transmission-daemon systemd 장치에 ExecStartPre 옵션을 추가하면 문제를 해결할 수 있습니다.

ExecStartPre=/usr/bin/timeout 120 sh -c "until ifconfig | grep -m 1 '192\.168'; do sleep 1 ; done"

자세한 내용을 확인하실 수 있습니다여기

관련 정보