"/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.