심볼릭 링크를 시스템 서비스로 사용할 수 있나요?

심볼릭 링크를 시스템 서비스로 사용할 수 있나요?

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

link절대 경로와 함께 사용:

systemctl link /home/nick/myservice.service

이미 링크된 파일에는 링크할 수 없습니다.

답변2

내가 아는 한, systemd는 이것을 잘 처리하지 못합니다. 내가 이해한 바에 따르면, 당신은 그 행동을 무시하고 싶어하는 것 같습니다 sshd.service. 그렇죠?

다행스럽게도 systemd는 이런 종류의 작업을 위해 설계되었습니다. 서비스 정의를 에 넣고 /etc/systemd/system/ssh.service실행하여 systemctl daemon-reload단위 파일을 다시 로드하면 systemd가 자동으로 system 대신 해당 구성을 사용합니다 ssh.service.

당신도 systemctl enable mysshd.service취업하고 싶나요? 괜찮아요. [Install]유닛 파일 섹션 에 다음 줄을 추가하여 systemd에 유닛 심볼릭 링크를 수정하도록 지시 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.servicesystemctl daemon-reloadAlias=systemctl reenable ssh.service

그런데, 절대로,한 번/usr/lib/systemd시스템 단위 파일을 변경해보세요! 파일 시스템 계층 표준필요/usr읽기 전용으로 처리됩니다 . 실제로 이는 패키지 관리자가 처리하고 /usr( 제외 /usr/local), 패키지 관리자가 처리하는 내용은 사용자가 건드리지 않음을 의미합니다. 특히 변경 사항이 결국 덮어쓰여질 수 있기 때문입니다. 대신, 비슷한 장소에 물건을 놓으십시오 /etc.

답변3

심볼릭 링크이전에는 불가능함. 하지만 오늘은 그렇게 시작하는군요.

답변4

다른 사람들이 이 질문에 답했지만, 사용자의 홈 디렉토리에 있는 유닛에 대한 심볼릭 링크를 생성할 수 없다는 점을 지적한 사람은 아무도 없습니다. 그들은 그것 밖에서 살아야합니다. 루트가 소유하고 644 권한으로 구성되어 있어도 작동하지 않습니다. /home 외부에 있어야 합니다.

@evandrix는 --user 플래그를 사용할 수 있다고 지적했습니다. 그 과정은 그보다 더 복잡합니다. "--user"는 사용자 디렉터리에서 활성화된 시스템 장치에만 적용할 수 있습니다. 이를 통해 사용자는 --system 도메인 외부에서 자신의 서비스를 제어할 수 있습니다. 특정 버전의 systemd(2.37 이상을 제외하고 어떤 버전이 나에게 도움이 되었는지는 잊어버렸습니다)만 --user 도메인을 사용합니다. 이 기사를 읽는 것이 좋습니다.

https://nts.strzibny.name/systemd-user-services/

추가적으로 이 아치 페이지는 훌륭한 정보를 제공합니다:

https://wiki.archlinux.org/title/systemd/User

이를 수행하는 방법에 대한 간략한 분석:

  1. 사용자 계정에는 비밀번호가 있어야 합니다. 계정에 비밀번호가 없으면 작동하지 않습니다.
  2. ps -aux | grep systemd특정 사용자에 대해 "/usr/lib/systemd/systemd --user"가 표시 되어야 합니다 . 이 서비스는 사용자가 처음 로그인할 때 pam.d에 의해 시작됩니다.
  3. /home/YourUserName/.config/systemd/user/ 디렉토리가 존재합니까? 그렇다면 유닛 파일을 거기에 넣으십시오. 생성되지 않으면 유닛을 거기에 놓으십시오.
  4. 로그아웃했다가 위 디렉터리로 장치를 옮긴 후 다시 로그인하세요.
  5. 이 명령을 실행
$ systemctl --user enable myuser.service
$ systemctl --user daemon-reload

이제 모든 systemctl 명령을 user로 실행할 수 있지만 --user 플래그를 포함해야 합니다.

$ systemctl --user status myuser.service
$ systemctl --user start myuser.service
$ systemctl --user restart myuser.service
$ systemctl --user stop myuser.service

장치의 [서비스] 섹션에서 "사용자" 및 "그룹" 설정을 적절하게 설정해야 합니다. 또한 --user를 사용할 경우 systemctl link myuser.service시스템 도메인에서만 작동하므로 사용하지 마십시오. 사용자의 심볼릭 링크는 런타임에 구축되어 systemctl --user enable myuser.service다음에 연결됩니다./home/YourUserName/.config/systemd/user/multi-user.target.wants/

관련 정보