시스템 유닛 파일을 어디에 두나요?


59

내가 읽어 유닛 파일 (사용자가 아닌 모드에서)에 대한 두 개의 폴더가 있음.

/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator

이 이해와 충돌하는 것은 https://unix.stackexchange.com/a/47715/33386 답변 입니다. 누군가 무슨 일이 일어나고 있는지 이해할 수 있도록 누락 된 정보를 입력 할 수 있습니까? ( 업데이트 : 답변이 업데이트되었으며 더 이상 이해가 충돌하지 않습니다. )

또한 스크립트가 폴더 내의 하위 폴더로 구성되어있는 것 같습니다 /etc/systemd/system/.

getty.target.wants
multi-user.target.wants

다른 위치에는 다른 위치가 있다는 것을 읽었습니다. 이들은 사용자 별 서비스를위한 것 같습니다.

/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.

2015-08-31 업데이트 :

다른 사람들을 위해 최근에 질문 한 관련 질문에 대한 링크가 있습니다. 시스템 단위로 실행되는 스크립트는 어디에 두어야합니까?


4
/etc/systemd/system어디 당신이 스크립트를 넣어, 팩맨 의 패키지 스크립트를 박았 /usr/lib/systemd/system및 발급은 systemctl enable foo.service에서 심볼릭 링크를 생성 /usr하는 /etc...
jasonwryan

1
참조 man systemd.target: 그룹화의 이유를 설명합니다.
jasonwryan

답변:


57

시스템 장치 파일 을 넣는 가장 좋은 장소 : /etc/systemd/system [Install] 섹션에 대상을 추가하고 "어떻게 알고 있습니까?"를 읽으십시오. 자세한 내용은. 업데이트 : /usr/local/lib/systemd/system또 다른 옵션입니다. 자세한 내용은 "회색 영역"을 참조하십시오. "

사용자 단위 파일 을 넣는 가장 좋은 장소는 : /etc/systemd/user 또는 $HOME/.config/systemd/user 권한과 상황에 따라 다릅니다.

진실은 시스템 단위 (또는 서문에서 말하는 것처럼 "단위 구성")는 어디든 있다는 것입니다. systemctl daemon-reload다음과 같은 이유로 인해 장치를 쉽게 찾을 수있는 위치에 배치 할 수 있습니다.

  • 표준 위치를 사용한다는 것은 시스템 생성기가 발전기를 찾아 부팅 할 때 쉽게 활성화 할 수 있음을 의미합니다 systemctl enable. 장치가 장치 종속성 트리 (장치 캐시)에 자동으로 추가되기 때문입니다.
  • 권한이있는 사용자 만 지정된 영역에 쓸 수 있으므로 권한에 대해 생각할 필요가 없습니다.

어떻게 알 수 있습니까?

그리고 systemctl enable심볼릭 링크를 어디에 만들지 정확히 어떻게 알 수 있습니까? [install]섹션 아래의 장치 자체에서 하드 코딩합니다 . 보통 같은 라인이 있습니다

[Install]
WantedBy = multi-user.target

파일 시스템의 사전 정의 된 위치에 해당합니다. 이렇게하면 systemctl이 단위가 단위 파일 그룹에 종속됨을 알 수 있습니다 multi-user.target( "target"은 단위 종속성 그룹을 지정하는 데 사용되는 용어입니다. 모든 그룹을로 나열 할 수 있습니다 systemctl list-units --type target). 대상과 함께로드 될 단위 파일 그룹이 targetname.target.wants디렉토리에 있습니다. 이것은 단지 심볼릭 링크 (또는 실제)로 가득 찬 디렉토리입니다. 귀하의 경우 [Install]절은 말한다 그것은이다 만에 심볼릭 링크가 존재하지 않는 경우 디렉토리, 그것은로드되지 않습니다. 시스템화 된 장치 생성기가 부팅 할 때 장치 파일을 종속성 트리 캐시에 추가하면 (를 사용하여 생성기를 수동으로 트리거 할 수 있음 ) 심볼릭 링크를 넣을 위치를 자동으로 알 수 있습니다 ( 이 경우 디렉토리에서)WantedBymulti-user.targetmulti-user.target.wantssystemctl daemon-reload/etc/systemd/system/multi-user.target.wants/ 당신이 그것을 활성화해야합니다.

매뉴얼의 요점 :

추가 장치는 장치로드 경로가 아닌 디렉토리에서 systemd ( "linked")로로드 될 수 있습니다. systemctl (1)에 대한 링크 명령을 참조하십시오.

systemctl에서 Unit File Commands를 찾으십시오.

단위 파일로드 경로

유닛 파일은 컴파일 중에 결정된 일련의 경로에서로드되며 아래 두 테이블에 설명되어 있습니다. 이전에 나열된 디렉토리에서 발견 된 단위 파일은 목록의 하단에있는 동일한 이름의 파일을 대체합니다.

변수 $SYSTEMD_UNIT_PATH가 설정 되면이 변수 의 내용이 단위로드 경로를 대체합니다. $SYSTEMD_UNIT_PATH빈 구성 요소 ( ":")로 끝나는 경우 일반적인 단위로드 경로가 변수의 내용에 추가됩니다.

표 1과 표 2 man systemd.unit가 좋습니다.

시스템 모드에서 실행할 때 경로를로드하십시오 ( --system).

  • /etc/systemd/system 로컬 구성
  • /run/systemd/system 런타임 단위
  • /usr/lib/systemd/system 설치된 패키지 단위

사용자 모드에서 실행할 때로드 경로 ( --user)

사용자 단위와 모든 / 전역 사용자 단위 에는 차이가 있습니다 .

사용자 의존

  • $XDG_CONFIG_HOME/systemd/user 사용자 구성 ( $XDG_CONFIG_HOME설정된 경우에만 사용 )
  • $HOME/.config/systemd/user 사용자 구성 ( $XDG_CONFIG_HOME설정되지 않은 경우에만 사용 )
  • $XDG_RUNTIME_DIR/systemd/user 런타임 단위 ( $XDG_RUNTIME_DIR설정된 경우에만 사용 )

  • $XDG_DATA_HOME/systemd/user 홈 디렉토리에 설치된 패키지 단위 ( $XDG_DATA_HOME설정된 경우에만 사용 )

  • $HOME/.local/share/systemd/user 홈 디렉토리에 설치된 패키지 단위 ( $XDG_DATA_HOME설정되지 않은 경우에만 사용 )

--global (모든 사용자들)

모든 사용자에게 적용되는 단위 (각 사용자가 소유 한 의미) 따라서 관리자가 부팅시 활성화하더라도 각 사용자는 이러한 서비스를 중지 할 수 있습니다.

  • /etc/systemd/user 모든 사용자를위한 로컬 구성 ( systemctl --global enable userunit.service)
  • /usr/lib/systemd/user 모든 사용자를 위해 시스템 전체에 설치된 패키지 단위
  • /run/systemd/user 런타임 단위

회색 영역

한편, File Hierarchy Standard/etc 는 바이너리를 실행하지 않는 로컬 구성에 대해 파일 계층 표준을 지정합니다 . 반면에 /usr/local/"로컬을 소프트웨어를 설치할 때 시스템 관리자가 사용 하도록 " 지정합니다 . 또한 모든 시스템 장치 파일은 아래에 있어야한다고 주장 할 수 있지만 (조직 목적 /usr/local/lib/systemd/system이 아니라면) 패키지 관리자가 아닌 "소프트웨어"의 일부인 장치 파일을위한 것입니다. 시스템 전체의 해당 시스템 사용자 단위는 아래에있을 수 /usr/local/lib/systemd/user있습니다.


단위 파일을 넣는 것에 대한 /etc/systemd/system조언은 자체 생성 단위 파일에 대한 일반적인 조언입니까? /usr/lib/systemd/system예를 들어 패키지 관리자가 설치 한 것은 항상 설치해야합니다 .
slm

질문을 참조하는 경우 @slm 예, systemd 유닛 파일, 자기가 만든 사람을 의미하는 것입니다.
Jonathan Komar

나는 /etc/systemd/user시스템 전체의 사용자 서비스와 ~/.config/systemd/user맞춤형 사용자 특정 서비스를 구별 할 것이다 .
Suuuehgi

16

/etc/systemd/system당신이 넣어 어디 당신의 스크립트를 팩맨은두고 패키지 에 스크립트를 /usr/lib/systemd/system.

발급은 systemctl enable foo.service에서 심볼릭 링크를 생성 /usr하는 /etc. 자세한 내용은 유닛로드 경로 섹션을 참조하십시오 man systemd.unit(5).


@ macmadness86 그것은 질문과 관련이 없기 때문에 누락되었습니다.
jasonwryan

1

필자는 3 개, 1 개, ntpd2 개, 고정 이더넷 카드, 1 개 p0f는 수동 OS 식별자 를 실행했습니다 . 나는 그들을 모두 넣었다 /etc/systemd/system. systemdNTP를 처리 할 수있을 것 같지만 그렇게 많이 사용하고 싶지는 않습니다.

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