.service
파일을 에 넣어서 이 작업을 수행하고 싶습니다 /etc/systemd/system
. 내 소스 .service
파일은 /opt/something.service
.
설치할 때 두 가지 옵션이 있습니다.
cp /opt/something.service /etc/systemd/system
ln -s /opt/something.service /etc/systemd/system
start
서비스 작업 을 할 enable
때 두 가지 방법 모두 작동합니다 (서비스가 제대로 작동함).
그러나 서비스를 비활성화하면 다음과 같은 차이점이 있습니다.
- 사본의 경우에는
/etc/systemd/system/something.service
여전히 - 링크의 경우
/etc/systemd/system/something.service
삭제됩니다 .
이것은 의도적으로 설계된 것입니까?링크를 통해 생성된 서비스를 비활성화한 후에는 이것만으로는 충분하지 않기 때문에 이는 매우 짜증나는 일입니다. enable
서비스 단위도 다시 생성해야 합니다.
답변1
예, 이는 의도적으로 설계된 것입니다.
매뉴얼 페이지에는 다음과 systemctl disable
같이 나와 있습니다.
하나 이상의 장치를 비활성화합니다. 이렇게 하면 장치 구성 디렉터리에서 지정된 장치 파일에 대한 모든 기호 링크가 제거되어 활성화로 인한 변경 사항이 취소됩니다. 그러나 이렇게 하면 실제로 생성된 심볼릭 링크만 활성화되는 것이 아니라 유닛 파일에 대한 모든 심볼릭 링크(즉, 수동으로 추가된 심볼릭 링크 포함)가 제거됩니다.
이에 대한 링크는 다음과 같습니다.https://www.freedesktop.org/software/systemd/man/systemctl.html#
systemctl enable
이유는 설명하지 않지만, 유닛 파일에 대한 링크를 찾기 때문에 를 사용하여 생성된 링크와 수동으로 생성된 링크를 구별할 수 없다고 추측할 수 있습니다 .
link
systemctl의 옵션은 systemd 검색 경로 외부의 소스 파일에 대한 심볼릭 링크를 생성할 때 사용해야 합니다. 또한 동일한 매뉴얼 페이지에서.
링크 파일 이름...
유닛 파일 검색 경로에 없는 유닛 파일을 유닛 파일 검색 경로에 연결합니다. 이를 위해서는 유닛 파일의 절대 경로가 필요합니다. 이 효과는 비활성화하여 취소할 수 있습니다. 이 명령의 효과는 장치 파일이 장치 검색 경로에 직접 설치되지는 않지만 시작 및 기타 명령에 사용할 수 있다는 것입니다.
답변2
어떤 배포판을 사용하고 있는지 잘 모르겠지만 RHEL 7부터 시작하겠습니다(이것이 제가 사용하고 있는 배포판이고 비슷해야 하기 때문입니다).
systemd
/usr/lib/systemd/system/*.service
일반적으로 다음에서 서비스 파일을 찾습니다(배포판에 대한 다른 서비스 링크를 확인할 수 있음)
서비스를 활성화하려면 해당 섹션이 있어야 하며 [install]
설치 섹션 내부에는 탭이 있어야 합니다 WantedBy=
. 이는 WantedBy
활성화해야 하는 조건(예: 런레벨)을 지정합니다. WantedBy
의 디렉토리와 일치 해야 합니다 /etc/systemd/system/*.target.wants
.
/etc/systemd/system/*.target.wants/
그런 다음 서비스를 활성화하면 해당 서비스를 가리키는 링크가 생성됩니다 /usr/lib/systemd/system/
. 서비스를 비활성화하면 링크도 제거됩니다.
예를 들어 다음을 포함하는 서비스 파일(test.service)이 있는 경우:
[install]
WantedBy=multi-user.target
그 다음에:
systemctl enable test.service
내부에 링크가 생성됩니다.
/etc/systemd/system/multi-user.target.wants/
test.service
포인팅 이라고 함/usr/lib/systemd/system/test.service
서비스를 비활성화하면 링크만 제거됩니다.
답변3
서비스에 대한 링크가 활성화되어 있어야 합니다. 폴더의 목적은 스크립트를 저장하는 것이 아니라 서비스를 비활성화하거나 활성화하는 것이므로 실제 파일을 갖는 것은 나쁜 습관입니다.
답변4
한 가지 해결 방법은 심볼릭 링크된 디렉터리를 삭제하지 않는 systemd를 사용하는 것입니다.
시스템 링크의 경우:/usr/local/lib/systemd/system/
사용자 링크의 경우: ~/.config/systemd/user.control
또는/usr/local/lib/systemd/user/
심볼릭 링크를 위 디렉토리에 넣으세요. systemctl disable
다음은 systemctl enable
예상대로 작동합니다.