Nginx를 실행하기 위해 Systemd를 프로세스 관리자로 사용하려고 합니다.
을 실행 sudo service nginx start
한 다음 를 입력하면 ps -aux | grep nginx
로 시작할 때 실행 중이던 것과 동일한 프로세스인 것 같습니다 sudo systemctl start nginx
.
그렇다면 service
매핑될 수 있습니까 systemctl
? 내가 어떻게 알아?
스크립트를 보면 /etc/init.d/nginx
의 구성과 많이 다릅니다 /lib/systemd/system/nginx.service
.
그러나 systemctl
해당 명령을 사용하여 nginx를 시작한 다음 service
해당 명령을 사용하여 중지하면 제대로 작동합니다. 순서는 역순으로 동일합니다.
답변1
sudo strace -f -e trace=process service nginx status 2>&1 | grep systemctl
답변2
속담처럼 "파일을 찾는 방법은 여러 가지가 있습니다." 이 경우 "동일한 프로세스가 실행 중"이 무엇을 의미하는지 완전히 명확하지 않으므로 가능한 두 가지 문제에 대해 설명하겠습니다.
즉, 먼저 "systemctl ngix start"를 수행한 다음 "service ngix start"를 수행하면 동일한 프로세스 ID가 실행 중입니다. 이는 데몬이 이미 실행 중인 경우 "시작" 프로세스가 데몬을 닫지 않고 새 데몬을 시작하기 때문입니다. 이 경우 결과는 no-op이어야 합니다. 어떤 것을 만들어멈추다진행하기 전에시작, 또는 사용재시작대신 명령을 내리세요.
중간에 중지(또는 다시 시작)하는 경우시작명령을 실행하면 두 경우 모두 ngix가 실행되고 있음을 알 수 있습니다. 프로세스 ID가 다르더라도 명령에 대한 인수는 동일합니다. 그러면 "문제"는 두 경우 모두 최종 목표가 다음을 얻는다는 것입니다. ngix 실행 중입니다. 콘텐츠 및 구성 파일의 위치는 변경되지 않습니다. 사용하려는 옵션은 다른 프로그램이 해당 옵션을 실행한다고 해서 변경되지 않습니다. 거의 모든 길은 로마로 통하는 상황이다.
마지막으로 의심스럽다면시스템 제어그리고제공하다동일한 파일에 대한 링크를 확인하고 시도해 보세요.
cmp `which systemctl` `which service`
이것은 당신에게 말할 것입니다시스템 제어그리고제공하다둘 다 완전히 동일한 코드(및/또는 동일한 파일에 대한 링크)를 포함합니다.
답변3
which systemctl
먼저 which service
두 파일의 출력을 살펴보고 두 ls -l
파일이 동일한 파일인지(심볼릭 링크를 통해) 또는 유사하게 보이는지(크기 등) 확인합니다 .
적어도 여기(Fedora 23)에는 systemd 명령을 사용하여 SysVinit 명령을 에뮬레이트하는 쉘 스크립트 /usr/bin/systemctl
인 바이너리가 있습니다 ./usr/sbin/service