Linux 서비스는 누가 통제하나요?

Linux 서비스는 누가 통제하나요?

누가 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이 나타내는 경우 .servicesystemd에 의해 시작되었을 것입니다. (아마도 불분명한) 프로세스를 찾는 것이 괜찮다면이름오히려 systemd-cgls기억하기가 더 쉽습니다. 그러면 systemctl status foofoo.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.

관련 정보