systemd에 전달된 매개변수는 어디에 있어야 합니까?

systemd에 전달된 매개변수는 어디에 있어야 합니까?

논쟁 또는-심벌 마크systemctl서비스를 시작할 때 systemd에 전달할 수 있습니다.

하지만 매개변수는 다음 위치에 있어야 합니다.

  1. 제공하다
  2. 체계
  3. 다른 곳

즉, 매개변수는 서비스 자체에 의해/서비스 자체에서 호출 가능해야 합니다(제가 가정한 대로)?

답변1

매개변수는 일반적으로 서비스 파일의 행에 존재합니다 ExecStart=.

# /lib/systemd/system/myservice.service
[Unit]
ExecStart=/bin/myprogram arg1 arg2

제공한 링크 중 하나를 사용하세요.템플릿화된매개변수 중 하나를 정의하는 서비스

# /lib/systemd/system/[email protected]
[Unit]
ExecStart=/bin/myprogram %i

[Install]
WantedBy=multi-user.target

이렇게 하면 서로 다른 매개변수를 사용하여 동일한 서비스의 여러 인스턴스를 활성화할 수 있습니다.

systemctl enable --now [email protected]
systemctl enable --now [email protected]

그러면 서로 다른 매개변수를 사용하여 두 개의 인스턴스가 실행됩니다: /bin/myprogram arg1/bin/myprogram/arg2.


GUI를 열지 않고도 서비스를 시작할 수 있나요?

이제 구체적으로 알 수 있습니다. 도커를 관리하는 GUI를 시작하는 서비스가 있는 것 같습니다. 이 경우 내 의심은 systemd잘못된 곳에 있습니다. 컨테이너를 실행하지 않을 docker-desktop.service수도 있지만 실행 중인 서비스와 상호 작용할 수 있는 인터페이스만 제공하면 됩니다. 서비스는 systemd개입 없이 모든 컨테이너 인스턴스를 하위 프로세스로 관리할 수 있습니다.

한번 보세요(추측일 뿐입니다)

systemctl list-units *docker*

컨테이너 관리를 담당하는 실제 서비스가 드러날 것이라고 확신합니다.

Docker 컨테이너에는 일반적으로 이러한 실행기가 필요하지 않으며 일반적으로 systemd를 통해 관리할 수 있지만 .service각 컨테이너마다 자체 매개변수 세트가 있는 파일이 있어야 합니다.

관련 정보