시스템 타겟을 만드는 방법은 무엇입니까? 시스템 대상 (IE : foo.target)을

체계적인 문제에 대한 많은 게시물, Youtube 비디오 및 “문서”를 통해 많은 정보를 검색 한 후에도 여전히 손실이 있습니다.

링크 ( https://wiki.archlinux.org/index.php/systemd#Create_custom_target )는 유망한 것처럼 보였지만 약간 모호했습니다.

질문

선택된 .service 단위로 부팅 할 수 있도록 사용자 정의 시스템 대상 (IE : foo.target)을 작성하는 방법은 무엇입니까?

  1. 시스템 부팅 default.target ( “foo.target”의 심볼릭 링크)
  2. “foo.target”은 베어 본 X 서버와 GUI 프로그램 만 시작합니다 (예 : “gvim”).

이유

하나의 X 프로그램을 빠르게 시작하기위한 사용자 지정 대상을 만들려고합니다. 필요하지 않은 모든 서비스를 제외시키는 것이 좋습니다.

미리 감사드립니다!



답변

을 통해 읽기 man 5 systemd.unit와하는 man 5 systemd.target유닛 파일은 다음과 같이 아니라 모든 다른 systemd로 목표를 정의하는 데 사용되는 것을 우리에게 알려줍니다. 대상 을 작성하는 방법에 대한 문서가 없으므로 수행 방법을 결정하기는 어렵지만 서비스 작성과 크게 다르지 않습니다.

대상을 작성할 때 systemd services 디렉토리에서 디렉토리로 심볼릭 링크 를 작성해야합니다 target.wants. 그런 다음 대상을 설정 / 부팅 할 수 있습니다. 예를 들어 다음과 같이 보일 수 있습니다.

/etc/systemd/system/foo.target

대상의 단위 파일입니다. graphic.target을 예로 든다면이를 기준으로 사용하여 자체 대상을 만들 수 있습니다.

[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes

시스템 맨 페이지에서 가져온 옵션을 설명합니다.

  • Description-대상을 설명합니다. 당신은 이해해야합니다
  • Requires-대상의 엄격한 의존성. 자신의 서비스를 시작하기 전에 기본 시스템을 시작해야합니다.
  • Wants소프트 의존성. 대상은 이를 시작할 필요 가 없습니다 .
  • Conflicts -유닛이 다른 유닛에 충돌 설정을 가지고 있다면, 전자를 시작하면 후자가 중지되고 그 반대도 마찬가지입니다.
  • After -이 서비스 이후의 부츠
  • AllowIsolate-당신과 당신의 환경에 달려 있습니다. 자세한 내용은 맨 페이지에서 확인할 수 있습니다systemd.unit(5)

/etc/systemd/system/foo.target.wants/

대상에 대해 작성 / 필요한 서비스를 연결할 디렉토리입니다. Wants=단위 파일 의 옵션 과 동일 합니다. 이 디렉토리를 작성하고 다음과 같이 심볼릭 링크를 작성하십시오. ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service. 이것은 시스템 디렉토리의 bar.service에서 foo.target.wants 디렉토리로의 심볼릭 링크를 만듭니다.


서비스의 단위 파일을 만드는 것은이 답변의 범위를 벗어난 것으로 생각되며 그 질문은 확실히 더 문서화되어 있으므로 지금은 그 내용을 생략하겠습니다. 유닛 파일을 만들 때는 target.wants 디렉토리에 심볼릭 링크하거나 Wants=지시문에 추가하십시오 .