시스템 타겟을 만드는 방법은 무엇입니까?


16

체계적인 문제에 대한 많은 게시물, 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 프로그램을 빠르게 시작하기위한 사용자 지정 대상을 만들려고합니다. 필요하지 않은 모든 서비스를 제외시키는 것이 좋습니다.

미리 감사드립니다!

답변:


16

을 통해 읽기 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=지시문에 추가하십시오 .


위의 내용에 따라 새 대상을 만들고 서비스에 몇 가지 대상을 추가했습니다. 그러나 해당 서비스는 systemd에 의해 시작되지 않습니다. 새로 추가 된 대상 작업 내에서 서비스를 보여주는 완전한 예가 있습니까?
linuxfan

1
부팅시 실행할 사용자 정의 서비스를 설정하는 간단한 단계를 찾고 있다면 necromancer의 스택 포스트를 참조하십시오 .
Pilbox

@linuxfan 나는 foo.targetRequires필드와 Before필드에 추가 multi-user.target하고 좋아한다 Requires: base.target foo.target. 그런 다음 Arch Linux vm을 재부팅 foobar.service하고 데몬으로 자동 실행됩니다.
L_K

2
좋은 대답이지만 실제로 예상대로 작동하지 않는 것 같습니다. 1. 원한다고해서 서비스가 해당 대상으로 시작한다는 의미는 아닙니다. 2. multi-user.target은 그것을 작동시키는 숨겨진 것들을 가지고있는 것 같습니다.
Otheus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.