누가 Linux 서비스를 제어하는지 빠르게 알아내는 방법은 무엇입니까?
initd, upstart, systemd 또는 Supervisord가 일부 서비스를 제어하고 있는지 확인하기 위해 /etc를 살펴보는 데 지쳤습니다.
답변1
어떤 초기화가 확실하지 않은 경우 추측으로 시작할 수 있습니다 ps | grep -E "systemd|upstart"
. (기존의 신생 시스템에는 일부 빛나는 시스템이 존재할 수 있지만 그 반대는 사실이라고 생각하지 않습니다). 감독관 등을 확인할 수도 있습니다.
Google 검색 initd가 나에게 말했으므로 /etc/init.d
그게 무슨 뜻인지 생각합니다... 죄송하지만 sysV init-scripts를 감지할 생각은 하지 못했습니다다른/etc를 보는 대신 (sysvinit에 갇혀 있다면 아마도또한서비스가 실제로 sysvinit에서 실행되고 있는지 확인 하고 싶 /etc/init.d/foo status
거나 service foo status
확인하고 싶습니다. 불행하게도 서비스가 실행 중인지는 알려주지 않습니다.둘 다sysvinit 및 감독자).
initctl list
스타트업에서는 pid가 표시되기 때문에 취업이 쉽다고 생각합니다 . 따라서 존재하는 경우 이는 upstart 작업이거나 이전 버전과의 호환성 하에서 실행되는 sysV init 스크립트입니다(차이점을 감지하려면 위 참조).
systemd에서는 다음을 사용하여 주어진 pid를 확인할 수 있습니다.ps의 cgroups 필드, 아래를 참조하세요. cgroup이 나타내는 경우 .service
systemd에 의해 시작되었을 것입니다. (아마도 불분명한) 프로세스를 찾는 것이 괜찮다면이름오히려 systemd-cgls
기억하기가 더 쉽습니다. 그러면 systemctl status foo
foo.service의 sysV init-script를 감지하는 데 충분한 정보를 제공할 수 있다고 생각합니다 .
$ ps xawf -eo pid,user,cgroup,args PID USER CGROUP COMMAND 2 root - [kthreadd] 3 root - \_ [ksoftirqd/0] [...] 4281 root - \_ [flush-8:0] 1 root name=systemd:/systemd-1 /sbin/init 455 root name=systemd:/systemd-1/sysinit.service /sbin/udevd -d 28188 root name=systemd:/systemd-1/sysinit.service \_ /sbin/udevd -d 28191 root name=systemd:/systemd-1/sysinit.service \_ /sbin/udevd -d 1096 dbus name=systemd:/systemd-1/dbus.service /bin/dbus-daemon --system --address=systemd: --nofork --systemd-activation [...]
감독용 supervisord status
.