[server] 시스템 : 인스턴스화 된 서비스의 모든 인스턴스를 한 번에 다시 시작
나는 systemd : Instantiated Services의 멋진 기능을 사용합니다.
한 번의 호출로 모든 인스턴스화 된 서비스를 다시로드하는 간단한 방법이 있습니까?
예 : 다음과 같이 모두 실행하고 싶지 않습니다.
systemctl restart autossh@foo
systemctl restart autossh@bar
systemctl restart autossh@blu
나는 이것을 시도했지만 이것은 작동하지 않는다
systemctl restart autossh@*
관련 : 하나의 시스템 서비스 파일로 N 프로세스 시작
최신 정보
먼저 Instantiated Services에 매료되었지만 나중에 Ansible과 같은 구성 관리 도구를 실행하는 것이 더 의미가 있음을 깨달았습니다. 나는 배웠다 : 도구를 단순하게 유지하십시오. 많은 도구가 조건 검사 (if .. else …) 및 루프를 구현하기 시작합니다. 예를 들어 웹 서버 또는 메일 서버 구성 그러나 이것은 다른 (상위) 수준 인 구성 관리에서 해결되어야합니다. 참조 : https://github.com/guettli/programming-guidelines#dont-use-systemd-instantiated-units
답변
Systemd (systemd-209에서 시작)는 와일드 카드를 지원하지만 쉘에서 확장을 시도하고있을 가능성이 있습니다. 따옴표를 사용하여 와일드 카드를 systemctl / service 명령에 그대로 전달하십시오.
systemctl restart 'autossh@*'
답변
좋지는 않지만 이전 시스템을 사용하는 시스템에서 작동합니다.
systemctl list-units -t service --full| cut -d' ' -f1| grep mypattern | while read s; do systemctl restart $s; done
물론 위의 답변 ( systemctl restart 'autossh@*'
) 의 해결책 이 더 좋습니다.
답변
@weirdan 정답은 맞지만 특정 배포판에 대한 내용이 없습니다.
들어 CentOS의 7과 유사한 , 당신은 할 수 있습니다 :
systemctl (start|stop|restart|status) my-service@*
그러나 “–all”플래그를 지정하면 (시작) 만 작동합니다.
systemctl (start) my-service@* --all
그렇지 않으면 서비스가 존재하지 않기 때문에 서비스를 찾을 수 없습니다. 이것은 시스템화 된 기능입니다.
를 들어 우분투 기반 시스템, 그렇지 않으면 아무것도하지 않습니다, 그것은 거의 같은 방식으로 작동하지만 차이점은 “–all”플래그가 systemctl 인수의 모든 지정해야한다.
systemctl (start|stop|restart|status) 'my-service@*' --all
답변
터미널에 와일드 카드 옵션이 있는지 여부는 알 수 없습니다. 할 수있는 것은 시스템화 된 스크립트에 스크립트를 추가하는 것입니다.
% i는 내가 생각하는 트릭을 수행하지만 인스턴스화 된 서비스를 스크립팅하는 방식과 관련이 있습니다.
여기서 지정 자라고 하는 설명을 찾을 수 있습니다.
그것은 그것을 보여줍니다 :
%엔
전체 단위 이름
%피
인스턴스화 된 단위의 경우 이는 단위 이름의 “@”문자 앞의 문자열을 나타냅니다. 인스턴스화되지 않은 장치의 경우 유형 접미사가 제거 된 장치의 이름을 나타냅니다.
%나는
인스턴스화 된 단위 : “@”문자와 장치 이름의 접미사 사이에있는 문자열입니다.
귀하의 질문에 직접 대답하는 것이 아니라 달성하려는 것으로 생각합니다. 이 아이디어에 따라 솔루션을 찾을 수 있다고 생각되면 시스템 스크립트를 공유하십시오. 그래서 우리는 결국 예제를 통해 설명하고 최종 스크립트를 제공 할 수도 있습니다.
그런 식으로 솔루션에 도달하기 위해 자신의 스크립트를 편집하는 데 자신감이 있다면 여기 에 예제가 있습니다 (솔루션과 관련이 있는지 알지 못하므로 인용하지 않을 것입니다. m 제안)