시스템 의존성 및 부팅 순서


20

프로세스를 시작하려면 부팅 순서를 지정해야합니다. Fedora 18에서 389 Directory Server 및 Samba를 실행하고 있습니다. 네트워크 서비스를 부팅 한 다음 389 DS, Samba를 어떻게 수행 할 수 있습니까? Fedora에서이를 관리하기위한 GUI가 있습니까?

Samba가로 시작하도록 설정했습니다 systemctl enable smb.service. 또한와 함께 389 DS를 사용하도록 설정했습니다 systemctl enable dirsrv.target.


Systemd 는 서비스간에 주문이 필요하지 않습니다. 아이디어는 모든 것을 병렬로 시작하고 사용 가능한 서버에 연결을 전달하는 것입니다. 기본 설치에서 제공 한 구성이 양호해야합니다. 왜 주문을 정의해야한다고 생각하십니까? 무언가가 작동하지 않습니까?
vonbrand

또한 이것이 다시 시작되었으므로 도메인 컨트롤러에서 파일 / 인쇄 서비스를 실행하지 않아야합니다.
Michael Hampton

@vonbrand이 문제가 발생했습니다. 구성이 LDAP 디렉토리에 저장되어 있기 때문에 DHCP 서버가 작동해야했습니다. 그렇지 않은 경우 DHCP 서버가 나타나지 않습니다.
mat

답변:


25

systemctl edit smb.service종속성을 업데이트하는 데 사용하십시오 .

After=dirsrv.target -dirsrv.target 다음에 smb.service가 시작되도록합니다.

견고성을 위해 (이 물건을 다루는 동안 가치가 있음) 다음 중 일부를 포함시킬 수도 있습니다.

Requires=dirsrv.target-smb.service가 활성화되면 dirsrv.target을 활성화하십시오. dirsrv.target이 실패하면 smb.service가 실패합니다.

Wants=dirsrv.target-smb.service가 활성화되면 dirsrv.target을 활성화하십시오. dirsrv.target이 실패해도 smb.service가 실패하지 않습니다.

BindsTo=dirsrv.target -dirsrv.target이 비활성화 된 경우 smb.service를 비활성화하십시오.

출처 : http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uisystemd를위한 GUI를 제공합니다. systemd 상태를 잘 볼 수 있지만 여전히 유닛 파일을 수정하려면 텍스트 편집기를 사용해야합니다.


A에 B가 필요한 경우 A 가 시작되지 않도록 "B"가 "실패"라고하는 것은 무엇입니까? B의 프로그램은 0이 아닌 값을 반환합니까?
John Wang

2
이것은 나쁜 연습을 권유하기 때문에 공감. /usr/lib/systemd배포 관리자이거나 각 패키지 업데이트에서 파일을 덮어 쓰는 것을 즐기지 않는 한 단위 파일 의 버전을 편집하지 마십시오 . 장치 파일을 복사 한 /etc/systemd다음 편집하거나 드롭 인 파일을 사용하십시오 (자세한 내용은 systemd.unit (5) 참조). 더 쉬운 방법 systemctl edit smb.service은 드롭 인 파일을 자동으로 수행하는 것입니다!
제레미 Visser

3
답변을 편집 해 주셔서 감사합니다! 그것은 문제를 해결하고 나는 공의로 전환했다. :-)
Jeremy Visser

10

다음 두 가지를 수행하십시오.

  1. /lib/systemd/system/smb.service종속성을 지정 하려면 단위 파일을 편집하십시오 . 이 [unit]섹션에는이 After=서비스 전에 도달해야하는 서비스 / 대상을 지정 하는 행이 있습니다.

    After=syslog.target network.target nmb.service winbind.service
    

    다음으로 변경하십시오.

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. 이 종속성을 Fedora에 버그로 다시보고 하여 향후 릴리스에 통합 될 수 있도록하십시오.


작동하지 않는 것 같습니다. 삼바는 여전히 389 전에 부팅
딜런 Klomparens

3
unit파일 을 수정 한 후에 는 보통 다음을 실행해야합니다.systemctl daemon-reload
scottyseus

2

파일 섹션 에서 Requires지시문이 있는 행을 변경하거나 포함시켜야 할 수도 있습니다.[Unit]/usr/lib/systemd/system/smb.service

Requires=dirsrv.target

After=dirsrv.target

글쎄, 나는이 답변에 투표했지만, 개인적으로 Needs = 대신 Wants = dirsrv.target으로 갈 것입니다. (Wants =에 대한 systemd.unit (5) 참조)
은하

2

서비스 파일을 수정하는 두 가지 대안이 있습니다 /usr/lib/systemd/system( 예 2 : 공급 업체 설정 재정의 참조 ).

  1. 파일을 복사하여 /etc/systemd/system사본을 수정하십시오. 이 파일은의 파일을 완전히 무시합니다 /usr/lib.

  2. 파일을 작성하십시오 /etc/systemd/system/smb.service.d/local.conf. 파일의 내용은 아래 예와 같아야합니다. 공급 업체 제공 서비스 파일의 "필수"및 "후"옵션을 선택적으로 무시합니다.

의 각 파일 수정을 포함하여 각각의 /usr/lib장단점이 있습니다. 최선의 선택은 서비스 및 수정의 특성에 따라 달라질 수 있습니다.

작동하지만 "After"옵션 만 추가하는 것만으로는 충분하지 않습니다 ( [Unit] 섹션 옵션 참조 ). "After"는 순서를 제어하지만 종속성은 제어하지 않습니다. 만약이 dirsrv.target그것을 시작되지 않습니다 순서를 지정, 다른 방법으로 시작되지 않습니다. "필수"또는 "원함"옵션을 사용하면 강제 dirsrv.target로 시작됩니다.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB :이 질문을 처음 받았을 때이 방법을 사용할 수 있었는지 모르겠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.