특정 서비스 후에 systemd 서비스를 시작 하시겠습니까? [닫은]


85

일반적인 질문이 있습니다. *.service특정 항목 *.service이 성공적으로 시작된 후 시스템 단위를 어떻게 시작합니까?

더 구체적인 질문은 시작된 website.service후에 만 어떻게 mongodb.service시작합니까? 즉,에 website.service의존해야합니다 mongodb.service.


1
이 질문은 ServerFault에 속합니다.
Rémi

1
@ Rémi 두 사이트 모두 괜찮습니다! :)
익명 펭귄

2
@AnonymousPenguin 아니요, 답장하기 3.5 년 전과 같았습니다. 주제에 관한 질문이 아닙니다. 프로그래밍에 관한 것이 아닙니다. SF 또는 더 나은 Unix / Linux.SE가 훨씬 더 적절할 것입니다.
underscore_d

Stack Overflow는 프로그래밍 및 개발 질문을위한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제에서 벗어난 것처럼 보입니다. 도움말 센터에서 내가 질문 할 수있는 항목을 참조 하세요 . 아마도 슈퍼 유저Unix 및 Linux Stack Exchange 가 더 나은 곳일 것입니다.
jww

답변:


118

[Unit] 섹션 아래의 .service 파일에서 :

[Unit]
Description=My Website
After=syslog.target network.target mongodb.service

중요한 부분은 mongodb.service

맨 페이지에 설명되어 있지만 형식화로 인해 첫눈에 명확하지 않습니다.

systemd.unit-올바른 형식

systemd.unit-형식이 좋지 않음


1
mongod 서비스는 매우 큰 데이터베이스를 시작합니다. mongo가 시작 후 데이터베이스를로드하는 데 더 많은 시간이 걸리는 것처럼 보이기 때문에 후속 서비스가 올바르게 시작되지 않습니다. 따라서 두 번째 서비스는 시작되지만 mongo가 성공적으로 시작되었지만 데이터베이스를로드하지 않았기 때문에 실패합니다. 어쩌면 지연이 ... 도움이 될 수
wayofthefuture

systemd 서비스가 다음 scenerio를 처리 할 수 ​​있습니까? 여러 서비스 A, B, C, D를 고려하십시오. A가 존재하면 B, C, D가 A 이후에만 시작하고 A가 존재하지 않으면 B, C, D가 임의의 순서로 시작할 수 있습니다. 도움을주십시오
아킬레스

@achilles A가 필요하지 않은 시스템에서 가짜 서비스 A를 만들 수 있습니까? 이러한 방식으로 B, C, D의 종속성을 단순하게 유지할 수 있습니다.
Walter A

50

After=종속성은에 After=포함 된 서비스와에 포함 된 서비스 After=가 모두 부팅의 일부로 시작되도록 예약 된 경우에만 유효 합니다.

전의:

a.service
[Unit]
After=b.service

이 방법은, 두 경우 a.service와는 b.service되어 활성화 , 다음 systemd 의지 주문 b.servicea.service.

내가 오해하지 않는다면, 당신이 묻는 것은 시작될 b.servicea.service시작 하는 방법 b.service입니다.

이에 대한 지시문은 Wants=또는 Requires=아래에 [Unit]있습니다.

website.service
[Unit]
Wants=mongodb.service
After=mongodb.service

차이 Wants=Requires=함께이다 Requires=시작하는 고장 b.service의 시작이 발생할 a.service가진 반면, 실패 Wants=, a.service하더라도 시작할 b.service실패. 자세한 내용은 의 man 페이지.unit 에 설명되어 있습니다.


8
나는 진실이이 대답의 정반대라고 믿습니다. After=website.service"website.service 후 내 유닛 실행!"을 의미합니다. 문서에서 설명하는 내용입니다. "After =는 나열된 장치가 시작된 후 구성된 장치가 시작되도록합니다" . "목록에있는 단위"는 "After ="의 오른쪽에있는 단위라고 가정합니다.
Sindarus

"이렇게하면 a.service와 b.service가 모두 활성화 된 경우 systemd는 a.service 다음에 b.service를 주문합니다."그 반대의 의미가 아닙니까? swap(a, b)
Mateen Ulhaq
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.