심볼릭 링크를 systemd 서비스로 사용할 수 있습니까?


14

예를 들어, 디렉토리 mysshd.service아래에 이름이 지정된 서비스가 있습니다 /usr/lib/systemd/system/. 다음과 같은 심볼릭 링크를 만들 수 있습니까?

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

그래서 fool.service로 수행하는 모든 작업이 mysshd.service( systemctl enable/disable start/stop fool.servce)에 반영됩니다 .

내 목적은 내 자신의 sshd 서비스의 심볼릭 링크로 기본 sshd 서비스를 덮어 쓰는 것입니다.


1
왜 서비스를 추가 및 활성화하고 기본 sshd 서비스를 비활성화하지 않습니까?
Lambert

내 소프트웨어가 심볼릭 링크 /etc/init.d/ssh-> /etc/init.d/myssh를 사용한 이전 버전과 호환되기를 원합니다.
nick

나는 여전히 당신이 무엇을 의미하는지 이해하지 못하지만 귀하의 라인에 따라 fool.service로 수행하는 모든 작업이 mysshd.service (systemctl enable / disable start / stop fool.servce)에 반영되도록합니까? </ quote > sshd 이후에 서비스를 시작 / 활성화하기 위해 시스템 의존성 ( wiki.archlinux.org/index.php/systemd#Handling_dependencies 참조 )을 살펴볼 수 있습니다.
Lambert

@nick은 Stack Exchange에 오신 것을 환영합니다! Stack Exchange에서는 upvoting하여 답변에 대한 kudos를 표시하는 것이 일반적입니다. 답변 왼쪽에있는 위쪽 화살표를 클릭하면됩니다. 답변이 문제를 해결 한 경우 확인란을 클릭하여 수락 된 것으로 표시 할 수도 있습니다. 감사!
strugee

답변:


9

내가 아는 한 systemd는 이것을 특히 잘 처리하지 못합니다. 내가 이해했듯이의 동작을 무시하고 싶 sshd.service습니까?

운 좋게도 systemd는 이런 종류의 것을 위해 설계되었습니다. 단순히 서비스 정의를 입력 /etc/systemd/system/ssh.service하고 실행 systemctl daemon-reload하여 유닛 파일을 다시로드하면 systemd는 시스템 대신 해당 구성을 자동으로 사용합니다 ssh.service.

일을하고 싶 systemctl enable mysshd.service습니까? 문제 없어요. 에서 [Install]당신의 유닛 파일의 섹션라는 한 줄을 추가합니다 Alias=mysshd.service. 그런 다음 시스템이 systemctl reenable ssh.service심볼릭 링크를 수정 하도록 실행 하면 황금색입니다.

이제 mysshd.service해야 할 일 에 대한 세부 정보를 제공하지 않았습니다 . 정상 ssh.service과 완전히 다른 경우 훌륭합니다! 위의 방법을 사용하십시오. 그러나 하나의 작은 것을 변경하려면 잘못된 접근법을 사용하고 있습니다. systemd를 사용하면 일반 단위 파일 위에 적용될 단위 파일의 "스 니펫"을 만들 수 있습니다. 이를 통해 개별 지시문을 추가하거나 무시하고 나머지 단위 파일이 패키지 관리자로부터 업데이트를 수신 할 수 있습니다. 이렇게하려면 간단히 작성하십시오 /etc/systemd/system/ssh.d/my-custom-config.conf( my-custom-config.conf원하는대로 변경 하고 대체 파일을 여러 개 가질 수도 있음). 해당 파일에서 변경하거나 평소에 추가하려는 지시문을 배치하십시오 ssh.service. Alias=지시문을 추가해도 systemctl start mysshd.service작동합니다! 그냥 실행하는 것을 기억하십시오systemctl daemon-reload작업을 마친 후 (및를 사용한 Alias=경우 systemctl reenable ssh.service).

따로, 에서 시스템 단위 파일을 절대로 변경 하지 마십시오 /usr/lib/systemd. 이제까지! 파일 시스템 계층 표준 에서는/usr를 읽기 전용으로 처리 해야 합니다 . 실제로 이것은 패키지 관리자가 /usr(을 제외하고 /usr/local) 처리하고 패키지 관리자가 처리하는 내용을 건드리지 않는다는 것을 의미합니다. 특히 변경 한 내용이 결국 덮어 쓰여지기 때문입니다. 대신에 물건을 같은 곳에 넣으십시오 /etc.


1
조금 명확히하기 위해 : 재정의 foo.service하려면을 실행 sudo systemctl edit foo.service하면 입력 한 내용이 저장됩니다 /etc/systemd/system/foo.service.d/override.conf.
Rockallite

또한 Alias=지시문은 대체 파일에서 작동하지 않습니다. 참조 github.com/systemd/systemd/issues/1090
Rockallite

@Rockallite systemctl edit는이 답변을 작성한 시점 에 대해 알지 못했습니다 . Alias=버그 를 반영하기 위해 내 답변을 자유롭게 편집하십시오 ( "응답자와 함께 OK"또는 편집 메시지에 무언가를 넣으십시오). 잘 잡는다.
strugee

5

link전체 경로와 함께 사용하십시오 .

systemctl link /home/nick/myservice.service

이미 자체 링크 인 서비스 파일은 링크 할 수 없습니다.


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