systemctl init.d와 서비스의 차이점


39

나는 리눅스를 처음 사용하고 Amazon Lightsail 인스턴스 (Ubuntu 16.04 LTS)를 사용하여 자신을 테스트하고 있습니다.

내가 찾은 많은 안내서를 살펴보면 사람들이 다른 명령을 사용하여 서비스를 시작 / 중지 / 다시 시작 / 다시로드 / 상태 확인하는 사람들을 볼 수 있습니다. 구체적으로;

sudo systemctl status apache2.service
sudo /bin/systemctl status apache2.service
sudo /etc/init.d/apache2 status
sudo service apache2 status

위의 모든 명령이 작동합니다.

  1. 한 명령을 다른 명령보다 선호해야합니까?
  2. 그렇다면 왜 그렇습니까?
  3. 알아야 할 다른 명령이 있습니까?

Monit에서 init.d를 사용하면 status 옵션을 사용하려고 할 때 문제가 발생했습니다 (상태는 서비스가 실제로 온라인 상태 일 때 오프라인 상태이며 Monit에 의해 다시 시작됨). Monit의 코드를 inid.d에서 / bin / systemctl로 변경하여 수정하십시오.

init.d를 사용하면 다른 사람들에게 일어난 일에 대한 자세한 정보를 제공하는 것으로 보입니다. 다른 명령 중 하나를 사용해야하는 경우 수행 된 작업에 대한 추가 정보를 표시 할 수 있습니까?

ubuntu@ip-172-26-12-245:~$ sudo systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /bin/systemctl restart pure-ftpd.service
ubuntu@ip-172-26-12-245:~$ sudo /etc/init.d/pure-ftpd restart
[ ok ] Restarting pure-ftpd (via systemctl): pure-ftpd.service.
ubuntu@ip-172-26-12-245:~$ sudo service pure-ftpd restart
ubuntu@ip-172-26-12-245:~$

시간을내어이 질문에 답해 주신 모든 분들께 감사드립니다.


리눅스에는 종종 행동을 수행하는 방법이 하나 이상 있습니다. 더 좋고 나쁘거나 옳고 그른 것은 없습니다. 개인적으로 나는 타이핑이 가장 적은 것을 사용합니다. Ubuntu가 systemd로 변경되면 이러한 명령 중 상당수가 sym 링크이거나 이전 버전과 호환 될 수 있습니다.
Panther

systemctl선호되는 구문이며 service이전 버전과의 호환성으로 제공됩니다. /etc/init.d/pure-ftpd또는 이와 유사하게 시작 / 중지 스크립트를 직접 호출합니다.
Panther

답변:


57

시작하기 위해 전체 역사와 노력 SysVInitSystemD있습니다. 하나의 답변으로 모든 것을 세분화하려고 시도하는 대신, 역사에 대한 자세한 내용과 주제에 대한 특정 기사를 제공하는 Google을 소개합니다.

http://www.tecmint.com/systemd-replaces-init-in-linux/

요약하자면, 그것은 느리고 힘든 전환이었습니다. 일부 레거시 기능은 init.d어느 정도 그대로 유지되었습니다 . systemctl서비스 제어 에 사용할 수있는 옵션이 있다면 그 것을 사용하는 것이 좋습니다. Linux의 미래는 당연한 SysVInit것이며, 더 오래된 방법은 완전히 사용되지 않는 것으로 간주되어 제거됩니다.

구체적으로 열거 한 각각을 다루려면 :

  1. sudo systemctl status apache2.service

이것은 SystemD서비스 처리에 대한 새로운 접근 방식입니다. 앞으로 Linux의 응용 프로그램은 다른 방법이 아닌 시스템 방식을 사용하도록 설계되었습니다.

  1. sudo /bin/systemctl status apache2.service

이것은 이전 명령과 동일합니다. 이 경우의 유일한 차이점 $PATH은 명령을 찾기 위해 쉘의 환경 변수 에 의존하지 않고 명령의 경로를 포함하여 명령을 명시 적으로 나열한다는 것입니다.

  1. sudo /etc/init.d/apache2 status

SysVInit서비스를 호출 하는 원래 방법입니다. 초기화 스크립트는 서비스 용으로 작성되어이 디렉토리에 배치됩니다. 이 방법은 여전히 ​​많은 사람들이 사용하고 있지만의 service서비스 호출 방법을 대체 한 명령이었습니다 SysVInit. 이있는 최신 시스템에는 일부 레거시 기능이 SystemD있지만 대부분의 최신 프로그램에는이 기능이 포함되어 있지 않으며 이전 응용 프로그램 초기화 스크립트가 모두 작동하지는 않습니다.

  1. sudo service apache2 status

이는 SysVInit서비스 시스템에서 사용되는 기본 도구 입니다. 어떤 경우에는 /etc/init.d/스크립트에 연결 되었지만 다른 경우에는 다른 곳에 저장된 init 스크립트로갔습니다. 서비스 종속성 처리로의 원활한 전환을 제공하기위한 것입니다.


마지막으로, 일부는 다른 것보다 많은 정보를 제공하기 때문에 명령에서 더 많은 정보를 얻는 방법을 알고 싶다고 언급했습니다. 이것은 거의 항상 응용 프로그램과 응용 프로그램이 init 또는 서비스 파일을 디자인 한 방법에 따라 결정됩니다. 그러나 일반적으로 자동으로 완료되면 성공했습니다. 그러나,을 확인하기 위해 start, stop또는 restart당신은 사용할 수 있습니다, status그것을 어떻게하고 있는지 볼 하위 명령을 사용합니다. status이전 init 스크립트에서 명령이 잘못되었다고 언급했습니다 . 이는 응용 프로그램 개발자가 살펴 봐야 할 버그입니다. 그러나 init 스크립트는 더 이상 사용되지 않는 서비스 처리 방법이되기 때문에 init 스크립트 옵션을 완전히 제거 할 때까지 버그를 무시할 수 있습니다. 그만큼systemctl status 그렇지 않으면 항상 올바르게 작동해야합니다. 그렇지 않으면 응용 프로그램 개발자에게 버그가 기록되어야합니다.


자세한 답변에 감사드립니다. 나는 또한 인터넷 검색을하고 있지만이 사람은 정말 혼란 스러웠으므로 여기에 게시했습니다. 또한 sudo systemctl status apache2 (sudo systemctl status apache2.service) 대신 작동합니다. .service 부분에 문제가 있습니까?
Waqas Tariq

@WaqasTariq 문제 없습니다! 둘 다 작동해야 systemctl하며 서비스 파일이 저장된 디렉토리를 검색하고 ".service"가 있으면이를 추가합니다. 예를 들어, 쓰기 후에 탭을 한 번 누르면 sudo systemctl status apache2추가하여 탭 을 완성해야 .service합니다. apache2 systemctl 파일이 두 개 이상인 경우 (예 : .servicea) .target탭을 두 번 눌러 사용 가능한 모든 옵션을 표시해야합니다.
TopHat

알았다. 귀하의 답변과 시간에 감사드립니다.
Waqas Tariq

@WaqasTariq 환영합니다!
TopHat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.