동일한 시스템 서비스 템플릿의 상호 배타적인 인스턴스를 실행하는 더 좋은 방법이 있는지 궁금합니다.
상황: 저는 내 노트북과 옆에 있는 워크스테이션 간의 공동 연결을 통해 터널링하기 위해 SSH를 사용하고 있습니다. 당연히 한 번에 하나의 터널만 실행할 수 있습니다. 새 터널을 열면 이전 터널에서 아직 실행 중인 인스턴스가 모두 일찍 닫혀야 합니다.
(이것은 다음과 같다.이 사용자가 사용하는 VPN 서비스 템플릿 인스턴스의 사용 사례 유형)
어쨌든 [email protected]
규칙은systemd가 충돌 목록에서 현재 인스턴스를 올바르게 제거하더라도( 자체 목록에서 [email protected]
자동으로 제거 ) 예상 결과가 없는 것 같습니다( 시작하기 전에 자동으로 중지되지 않음) .Conflicts=
[email protected]
[email protected]
[email protected]
현재 이 끔찍한 장치를 사용하면 저에게 효과적입니다.
ExecStartPre=-/bin/sh -c 'systemctl --user stop $$(systemctl --user list-units %p@\'*\'.service|gawk \'($$3~/^activ/)&&(!($$1~/%I/)){print $$1};\')'
ExecStart=/usr/bin/autossh -M 11111 -N -L24800:localhost:24800 %I
이는 이 서비스 재배치( , list-units
를 반환함 )의 모든 인스턴스 목록을 가져오고 gawk를 사용하여 현재 인스턴스가 아닌 활성 인스턴스를 필터링하고 해당 인스턴스만 중지하는 데 사용됩니다 (따라서 시작은 시작하기 전에 중지 됩니다 ).[email protected]
[email protected]
[email protected]
[email protected]
그것은 나에게 효과적이지만 추악하고 "보다 체계적인 접근 방식“그렇게 하려면 어떻게 해야 할지 모르겠습니다.