한두 시간 동안 검색했지만 올바른 해결책을 찾을 수 없는 것 같습니다. 상황은 이렇습니다.
여러 가지 서비스가 있습니다. Docker 컨테이너를 실행하는 서비스 A를 시작합니다. 애플리케이션이 시작된 다음 isActive
파일 시스템의 마운트된 디렉터리에 파일을 씁니다.
서비스 및 경로 단위 파일 B가 있습니다. watch.path는 isActive
존재할 때까지 기다리고 watch.service를 실행하며 서비스 파일은 " isActive
Exists!"를 에코합니다.
논리의 이 부분은 잘 작동합니다. 서비스 A가 시작되는 것을 사용 sudo journalctl -xefb
하고 지켜본 후 등록을 완료하고 파일에 씁니다. 그런 다음 서비스 B 단위 파일이 시작되고, 에코되고, 완료되는 것을 볼 수 있습니다.
그런 다음 서비스를 감시하는 서비스 B Require
뿐만 아니라 여러 다른 서비스 파일(서비스 C/D/E/F)도 있습니다 . After
단, 서비스 B가 시작/종료되기 전에 서비스 C/D/E/F가 시작됩니다.
이것은 나의 현재 "시계" 서비스입니다:
# watch_for_client.path
[Unit]
Wants=A.service
After=A.service
[Path]
PathExists=/A/B/C/d.txt
[Install]
WantedBy=multi-user.target
# watch_for_client.service
[Unit]
After=A.service
[Service]
Type=oneshot
ExecStart=/bin/echo "file found"
그런 다음 다른 파일에
[Unit]
Requires=wait_for_client.service
After=wait_for_client.service
[Service]
...
Type=simple
...
[Install]
WantedBy=multi-user.target
답변1
서비스 C/D/E/F의 서비스 단위 파일 구성에서 세 가지 사항을 변경해야 합니다.
- [Unit] 섹션에서: 이 줄을 삭제하세요.
Requires=wait_for_client.service
- [Unit] 섹션: 이름이 잘못되었으며 서비스 B 이름과 일치
After=wait_for_client.service
해야 합니다 .After=watch_for_client.service
- {Installation] 섹션에서: 다음과 같아야 합니다.
WantedBy=watch_for_client.service