systemd init 스크립트에서 변수 사용

systemd init 스크립트에서 변수 사용

저는 SysVinit 및 systemd용 초기화 스크립트를 우리 패키지 중 하나와 함께 배포하도록 만들었습니다(네트워크 서비스를 위한 비대화형 백그라운드 데몬을 실행해야 함). 설치 프로그램은 사용자에게 서비스를 설치할 것인지 묻습니다. 그렇다면 데몬의 사용자 및 홈 디렉터리를 생성하고 올바른 스크립트(프로세스 1의 이미지 이름에 따라 다름)를 올바른 위치에 복사합니다.

일부 세부 사항은 사용자의 특정 구성이나 회사 정책(도구가 어디에 설치되어 있는지, 데몬 사용자를 무엇이라고 불러야 하는지, 그의 홈 디렉터리는 어디에 있어야 하는지)에 따라 다르기 때문에 나는 와 같은 자리 표시자를 사용했고 %%TOOL_USER%%내 설치 스크립트는 sed를 통해 이를 대체했습니다. 자동 기능은 CentOS와 Debian에서 작동하므로 이미 만족스럽습니다.

그러나 물론 모든 시스템이 조금씩 다르기 때문에 고객은 서비스를 수동으로 설치하도록 선택할 수 있습니다(예: syslog를 사용하지 않거나 일반적으로 일부 고객의 경우와 같이 더 높은 보안 수준을 갖는 경우). 이 경우 초기화 스크립트를 조정해야 합니다.

의 경우시스템 초기화이것은 기본적으로 쉘 스크립트이고 세 개의 변수를 입력했기 때문에 쉽습니다.

user=%%TOOL_USER%%
executable=%%TOOL_EXEC%%
working_dir=%%TOOL_HOME%%

상단에 몇 가지 구성 팁이 나와 있습니다.

반면에 systemd에서는 사용자 정의 변수를 설정하고 참조할 수 있는 가능성을 찾지 못했습니다., 따라서 내가 할 수 있는 일은 사용자에게 모든 항목을 %%TOOL_*%%적절한 값으로 바꾸도록 지시하는 것뿐입니다. 나는 일반적으로 새로운 시스템 스크립트가 작동하는 방식을 좋아하지만,이제 사용자가 이벤트를 놓칠 수 있는 초기화 스크립트와 같은 보다 안전한 접근 방식을 선호합니다. 제가 놓친 부분이 있나요?

참고로 살펴보니freedesktop.org systemd.service 문서.

답변1

( 참조)를 사용하여 환경 변수를 저장할 파일을 선언할 수 있습니다 EnvironmentFile=. man systemd.execEnvironmentFile은 변수를 기반으로 도구에서 생성된 파일일 수 있으며, 여기서 파일은 systemd수동으로 관리되는 파일일 수 있습니다.

환경 변수를 설정한 후에는 애플리케이션이 적절하게 응답할 수 있어야 합니다.

관련 정보