Systemd에서 "링크" 단위 파일 활성화

Systemd에서 "링크" 단위 파일 활성화

나는 여전히 systemd를 이해하고 있으며 몇 가지 문제에 직면하고 있습니다. 별로 대단한 일은 아니지만, 무슨 일이 일어나고 있는지 좀 더 알고 싶습니다. 다른 곳에서는 이에 대한 언급을 찾을 수 없습니다.

먼저, 서비스에 대한 사용자 정의 단위 파일이 배치되어야 한다는 것을 알고 있습니다 /etc/systemd/system. 그러나 단위 파일이 다른 곳에 위치할 수 있으면 서버 관리에 좋을 것입니다.

문서를 보면 다음과 같이 유닛 파일을 "링크"할 수 있다고 나와 있습니다.

systemctl link /path/to/servicename.service

그러면 에 위 콘텐츠에 대한 링크가 생성됩니다 /etc/systemd/system. 이제 서비스를 시작/중지할 수 있습니다. 표면적으로 이것은 우리가 서비스를 관리하는 좋은 방법처럼 보입니다.

그러나 이러한 "링크된" 유닛 파일을 활성화하려고 하면 실패하게 됩니다.

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

정확히 동일한 유닛 파일을 사용하지만 /etc/systemd/system링크 대신 복사하면 다음과 같은 결과를 얻을 수 있습니다.

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

이로써 시스템 시작 시 링크된 유닛 파일을 호출할 수 없는 것으로 보입니다.

그렇다면 "링크" 기능의 요점은 무엇입니까? 문서에 따르면 다음과 같습니다.

링크 파일 이름

유닛 파일 검색 경로에 없는 유닛 파일을 유닛 파일 검색 경로에 연결합니다. 이를 위해서는 유닛 파일의 절대 경로가 필요합니다. 이 효과는 비활성화하여 취소할 수 있습니다. 이 명령의 효과는 장치 파일이 장치 검색 경로에 직접 설치되지는 않지만 시작 및 기타 명령에 사용할 수 있다는 것입니다.

답변1

매뉴얼 페이지가 오해의 소지가 있습니다.

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

첫 번째는 당신이 그것을 할 수 있도록 해줍니다 systemctl start myservice. 두 번째는 myservice자동 시작을 가능하게 합니다(@Julien이 지적했듯이 자동으로 추가됩니다 link).

내 생각엔...난 하루 종일 이것에 대해 생각하려고 노력했어요.

답변2

기본 경로가 아닌 경로에서 서비스를 활성화하는 경우 전체 경로를 사용해야 합니다. 활성화하면 다음 링크도 생성됩니다.

systemctl enable /root/myservice.service

활성화되면 서비스 이름을 사용하여 시작/중지/상태를 설정할 수 있습니다.

systemctl start myservice

다음은 몇 가지 고려 사항입니다.

관련 정보