시스템화 된 서비스 종속성을 설정하는 방법은 무엇입니까?


17

CentOS 7 시스템 부팅 중 nginx 시작이 다음 오류와 함께 실패합니다 :

2014/08/04 17:27:34 [emerg] 790#0: bind() to a.b.c.d:443 failed (99: Cannot assign requested address)

SSL을 통해 호스트를 제공하기 위해 해당 IP 주소에 바인드하려고 시도하기 전에 네트워크 인터페이스가 아직 작동하지 않아서 이런 일이 발생하고있는 것 같습니다.

내 생각에 nginx.service의 요구 사항으로 network.service를 지정해야하지만 / etc / systemd /에서 네트워크 서비스를 찾을 수 없습니다.

systemd에서 서비스 순서 또는 종속성을 구성하려면 어떻게해야합니까?


1
주문 보다 서비스 의존성을 더 찾고 있지 않습니까?
CVn

좋은 지적! 업데이트되었습니다.
vincent.io


고마워요. 답변을 넣어서 닫을 수 있습니까? :)
vincent.io

내 답변을 삭제했습니다. 그 답변의 출처가 게시되었습니다 (Mr. Hampton). 그의 정답으로 표시해야합니다.
Belmin Fernandez

답변:


19

nginx를 시작하기 전에 네트워크가 작동하는지 확인 After=network.target하려면 최소한 [Unit]장치 파일 섹션에 있어야합니다. 유닛 파일에 왜 없는지 모르겠습니다.

다음은 Fedora에서 제공하는 편리한 Fedora 시스템의 전체 예입니다.

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

고마워, 좋은 대답! remi 리포지토리 (타사)에서 nginx를 설치했는데, 왜 유닛 파일에 "After"가 없는지 설명 할 수 있습니다.
vincent.io

1
흥미 롭군 나는 그에게 메모를 남기고 그 문제에 대해 알려줄 것이다. 그의 패키지는 일반적으로 매우 높은 품질이며 어떻게 그가 놓쳤는 지 잘 모르겠습니다.
Michael Hampton

큰 제안이 끝났습니다.
vincent.io

5

오류 로그에서 nginx 구성처럼 보입니다. 파일에는 명시적인 IP 주소를 가진 청취 지시문이 있습니다.

listen a.b.c.d:443

네트워크 인터페이스가없는 한이 수단의 nginx가 시작되지 않습니다 는 IP ABCD가 인터페이스에 할당되었습니다.

두 가지 옵션이 있습니다.

  • 청취 지시문을 다음과 같이 변경하십시오. (모든 IP 주소에 바인딩)
  • nginx가 네트워크 온라인에 의존하도록하십시오.

http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/에 설명 된 것처럼 network.target 은 네트워크 관리 스택이 작동 중임을 나타냅니다. [...] 네트워크 인터페이스가 도달했을 때 이미 구성되어 있는지 여부 정의되지 않았습니다.

IP 주소가 이미 할당되어 있고 인터페이스가 작동 중인지 확인하려면 nginx의 시스템 단위 파일에 network-online.target을 추가해야합니다.

/etc/systemd/system/multi-user.target.wants/nginx.service 파일의 After = 및 Requires = 행에 network-online.target이 있어야합니다.

[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target network-online.target
Requires=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

1
언급 +1 network-online.target- 경우 누군가에하는 것도 궁금해 : 네, 모두 Requires=하고 After=있기 때문에 필요하다 Requires=(틀림없이 놀라 울 정도로) 필요한 기기와 필요로하는 일 사이의 순서를 의미하지는 않습니다.
maxschlepzig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.