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.target
systemd
서비스가 어떤 시점에서는 활성 네트워크 연결이 필요하다는 것을 알려줍니다 .이 서비스만 시작하도록 지정되어 있지 않습니다.뒤쪽에네트워크가 시작되었습니다.
(예, 서비스가 실행되는 동안 네트워크 인터페이스 표시, 재구성 및/또는 사라지는 것을 처리할 수 있는 서비스가 있습니다. 이러한 서비스의 Requires=network.target
경우 잘 작동합니다. 현대 사회에서는 핫플러그와 IPv6가 점점 더 보편화되고 있습니다. 서비스는 이와 같아야합니다).
매뉴얼 페이지 에서 systemd.unit(5)
(강조):
수요 종속성은 서비스가 시작되거나 중지되는 순서에 영향을 미치지 않습니다. 이는
After=
또는 옵션을 사용하여 독립적으로 구성해야 합니다Before=
. 장치에 다음foo.service
과 같이 구성된 장치가 필요하고 순서가 사용되거나 구성되지 않은 경우bar.service
Requires=
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"
자세한 내용을 확인하실 수 있습니다여기