"/etc/init.d"및 "/ lib / systemd / system"의 서비스에 대해 혼동


15

나는 리눅스 세계에 완전히 익숙하지 않기 때문에 내가 잘못 말할 수있는 것에 대해 죄송합니다.

Debian 8.5 컴퓨터에서 Mongo DB를 실행하려고합니다. 패키지를 설치했을 때 (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).

내 마음을 정리하는 데 도움을 줄 수 있습니까? 일부 의견의 도움으로 아마도 질문에 집중하고 좁힐 수 있습니다.

답변:


12

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

사용하십시오 systemd. 데비안 8의 새로운 기능이지만 기본값입니다. Systemd 서비스 파일이 있습니다 되어 있는 init.d 스크립트를보다 간단하게 볼 수 있습니다. 시스템 서비스에서 지원하지 않는 특정 기능은 언급하지 않았습니다.

서비스 파일이 포함되어 있지 않다면, systemd행복하게 init.d 스크립트를 사용하십시오. mongod 패키지 개발자는이 시스템 정의가 더 낫다고 생각합니다. :)

의 출력을 확인하십시오 systemctl status mongod. 부팅시 서비스가 시작되도록 설정되어 있으면 Loaded:라인에 "enabled"가 표시됩니다. 그렇지 않으면을 사용할 수 있습니다 systemctl enable mongod. 옵션도 포함 할 수 --now있으며 동시에 mongod를 시작합니다.


감사합니다! 나는 체계적으로 공부하고 결국 그것을 사용할 것입니다. 지금은 그것을 비활성화하고 마침내 내가 작업 한 init.d 스크립트를 실행하고 싶었습니다. 나는 갔다 : systemctl disable mongod; 그런 다음 mongod.service의 이름을 mongod-backup.service로 바꿨습니다. 그때 systemctl daemon-reload. 이것이 맞다고 생각하십니까? / lib / systemd / system /에서 파일을 수정해서는 안되지만, 이름을 바꾸지 않고 systemctl은 init.d 스크립트를 무시하고 있습니다.
natario

/ lib / systemd의 파일은 conffile이 아닙니다. 데비안 패키지를 설치하고 파일을 수정하고 나중에 패키지를 업데이트하는 것은 권장하지 않습니다. 대신, "작업"했던 init.d 스크립트의 이름을 바꿔야합니다 (아마도 수정 하시겠습니까?). init.d 스크립트는 conffile 인 경향이 있습니다. 업데이트가 conffile을 변경하면 (이유가 없어야 함) 먼저 경고를 표시합니다. 이 경우, 원래, 효과적으로 삭제 된 init.d 스크립트의 업데이트 된 버전을 사용할 수있게되면 알려줄 것입니다.
sourcejedi

새 서비스에 의존하는 서비스에 순서 의존성을 추가해야 할 수도 있습니다 mongod. 또한 엄격한 의존성을 제거해야 할 수도 있지만 그렇게 생각하지는 않았습니다. 영향을받는 서비스를 수정하는 안전한 방법은 서비스를 복사하여 사본을 /etc/systemd/system/수정하는 것입니다.
sourcejedi

일반적으로 systemd를 고수하는 것이 더 간단하다고 생각합니다. bash, init-functions systemd의 back-compat 기능을 공부하고 있습니다. 순수한 SysV init 시스템을 배우지 않기 때문에 그러한 시스템을 사용하는 경우 실제로 시스템에서 제공되는 기능을 기대할 위험이 있습니다.
sourcejedi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.