/etc/init.d 및 /lib/systemd/system 서비스에 대해 혼란스러워함

/etc/init.d 및 /lib/systemd/system 서비스에 대해 혼란스러워함

Debian 8.5 시스템에서 MongoDB를 실행하려고 합니다. 패키지(percona.com에서 미리 빌드됨)를 설치했을 때 다음 파일을 발견했습니다.

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

나는 그것이 /etc/init.d/mongod전달되는 한 시작 시 또는 다른 특정 시스템 상태에서 호출될 것이라는 것을 알고 있습니다 update-rc.d. 이것은 나에게 완벽하게 작동합니다. 이 스크립트는 mongo 데몬을 초기화하고 시작합니다. 시작, 중지, 다시 시작 등에 대한 "트리거"가 있는 것으로 보이며 내가 알 수 있는 한 sudo service mongod <action>.

/lib/systemd/system/mongod.service동일한 작업을 수행하는 것 같지만(예: mongo 실행) 구성이 더 적습니다. ExecStart 매개변수에 한 줄만 있으면 됩니다.

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

내가 이해하는 한, 이는 sudo systemctl start mongod.

  • 시작 시 호출되는지 이해가 되지 않습니다.

  • 두 개의 "서비스" 파일이 필요한 이유와 그 중 하나(아마도 /lib/systemd에 있는 파일이 훨씬 간단하므로)를 제거하는 방법을 이해하지 못합니다.

  • 둘 사이에 어떤 관계가 있는지 이해가 되지 않습니다.

  • systemctl스크립트 에서도 작동한다는 것을 읽었는데 init.d, 이 경우 두 파일 중 어느 파일이 systemctl mongod start.

생각하다약간의 중복이 있으므로 두 가지 방법 중 하나만 선택해야 합니다. 나는 그것이 맞는지 확인하고 싶다.

  • 시작 시 호출됨
  • 명령(예: service또는 systemctl)을 통해 호출할 수 있습니다.

내 마음을 비우도록 도와주실 수 있나요?

답변1

이름이 같은 스크립트와 시스템 파일이 모두 있으면 init.dsystemd는 모든 작업에 서비스 파일을 사용합니다. .service나는 service명령이 systemd로만 리디렉션된다고 생각합니다. init.d 스크립트는 무시됩니다.

사용 systemd. 데비안 8의 새로운 기능이지만 기본 설정입니다. 시스템 서비스 파일은 다음과 같습니다.~해야 한다init.d 스크립트보다 간단해 보입니다. systemd 서비스가 필요한 특정 기능을 지원하지 않는다고 언급하지 않았습니다.

서비스 파일이 포함되어 있지 않으면 systemdinit.d 스크립트가 사용됩니다. 그래서 mongod 패키지 개발자는 이 systemd 정의가 더 좋다고 생각한다고 말합니다 :).

출력을 살펴보십시오 systemctl status mongod. 부팅 시 서비스가 시작되도록 활성화된 경우 해당 Loaded:줄은 "Enabled"로 표시됩니다. 그렇지 않으면 systemctl enable mongod이 옵션을 포함할 수도 --now있으며 동시에 mongod가 시작됩니다.

관련 정보