systemd의 실행 트리를 보는 방법이 있습니까?


63

내가 질문에 의미하는 것은 : 순서대로 된 목록 (pstree가 프로세스를 위해하는 것처럼)을 덤프하여 systemd가 제공된 단위 세트, 즉 종속성이 해결되고 실행을 위해 작업이 대기 된 후의 트리를 어떻게 실행했는지 확인하는 방법이 있습니까? ? 시스템 상태 데이터를 분석하여 할 수 있지만 그러한 트리를 볼 수있는 빠른 방법이 있습니까? 실패 조사에 많은 도움이 될 것입니다 (예를 들어, 부트 프로세스가 일부 장치에 걸린 경우 자세한 조사를위한 대략적인 위치를 찾아 낼 수 있습니다.


systemd 용 시각화 도구를 만들었습니다. github.com/ywiyogo/systemd-visual
Yongkie

답변:


71

systemd-analyze당신의 친구입니다. 예를 들어 systemd-analyze critical-chain, 데몬 차단 트리 를 출력합니다. 예를 들어 내 것 :

graphical.target @20.211s
└─multi-user.target @20.211s
  └─nginx.service @19.348s +862ms
    └─network.target @19.347s
      └─NetworkManager.service @10.315s +9.031s
        └─basic.target @10.312s
          └─timers.target @10.311s
            └─systemd-tmpfiles-clean.timer @10.311s
              └─sysinit.target @10.295s
                └─systemd-update-utmp.service @10.167s +127ms
                  └─systemd-tmpfiles-setup.service @10.124s +41ms
                    └─local-fs.target @10.097s
                      └─home-entd-Downloads.mount @10.093s +2ms
                        └─home.mount @9.326s +672ms
                          └─systemd-fsck@dev-sda6.service @8.472s +696ms
                            └─dev-sda6.device @8.471s

예를 들어 NetworkManager는 기본적으로 전체 부팅을 유지합니다.

좀 더 자세하게 보려면 전체 실행 체인을 svg 파일로 렌더링 할 수 있습니다. systemd-analyze plot > something.svg전체 체인 (120+ 모듈)을 상태, 차단 및 다른 문제를 보여주는 고해상도 svg 파일에 대한 진행률 표시 줄로 출력합니다.

마지막으로 systemd-analyze dot전체 계층 구조를 출력하는 도트 파일을 출력하는 systemd-analyze dot | dot -Tpng -o stuff.png 도구가 있습니다 . 도트 툴을 사용하면 ps 및 svg 파일로도 출력 할 수 있습니다.

위의 모든 도구는 systemd-analyze 도구에 내장되어 있으며 최소한 기본적으로 archlinux에는 systemd가 제공됩니다. 나는 그것을 다루는 일부 타사 프로젝트가 있다고 생각합니다.


귀하의 답변에 감사드립니다. 그러나 질문을 다루지 않고 단지 질문의 일부를 반복합니다 (시스템 상태 데이터를 분석하여 수행하는 방법을 알고 있다고 언급했습니다). 따라서 문제는 모든 종속성이 해결 된 후 (예 : 부팅 후) pstree와 같은 부팅 시퀀스 트리를 얻는 방법입니다. 크리티컬 체인은 거의 그렇습니다 (하단 식 트리 임에도 불구하고). 시작된 모든 장치를 나열하지는 않습니다. 질문에서 요구되는 사항 : 특정 시점까지 실행 된 모든 단일 단위를 나열하는 트리입니다 (예 : multi-user.target을 때림).
갤럭시

4
systemd-analyze plot > something.svg대상으로 실행이 세 번입니다 (원하는 것 중 가장 가깝습니다). systemd-analyze 도트는 종속성의 전체 그래프입니다 (가장 올바른 표현입니다). 이것들은 당신이 원하는 것이 아닙니까? 줄거리에서 목표를 찾고 실행 해야하는 것을보십시오. 일부 그래프 분석 툴킷을 많이 실행하고 종속성을 볼 그래프 포인트를 선택하는 경우 동일한 종속성이 정확하게 나열 된 그래프입니다 (도트 툴에는 더 많은 설정이 있음). 매뉴얼 페이지 참조 : freedesktop.org/software/systemd/man/systemd-analyze.html --order 및 유사
IBr

1
맨 페이지에서 : 이름이 "avahi-daemon"으로 시작하는 모든 장치의 모든 종속성을 표시합니다. : $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svg알려진 모든 대상 장치 간의 종속성을 표시합니다.systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
IBr

1
IBr, 그러나 불행히도 이것은 텍스트 콘솔에서 사용할 수 없습니다. 답변에 보낸 시간을 정말 고맙게 생각합니다 (분석에 데이터를 가져 오려면 정확합니다). 그러나 원래 질문을 다루지 않으므로 받아 들일 수 있습니다. 죄송합니다.
은하

1
문제 없습니다. 나는 커맨드 라인 도구를 좋아한다 :)
IBr

13

여전히 귀하의 질문에 완전히 대답하지는 못하지만 --fuzz옵션으로 시도하십시오

systemd-analyze critical-chain --fuzz 1h

당신은 또한 단위 지정할 수 있습니다 자신의 볼 중요한 사슬을 당신이에 제한되지 않도록 반드시 multi-user.target

systemd-analyze critical-chain network.target local-fs.target

도움이 되었기를 바랍니다


12

질문을 제대로 이해하지 못했지만 다음 명령으로 트리 시각화를 사용할 수 있습니다.

sudo systemctl status

그리고 또한 :

sudo systemctl list-dependencies 

도움이 되었기를 바랍니다 :)

또한 다른 목적으로 systemctl symlinks 폴더의 트리를 작성하는 것이 유용 할 수 있습니다.

tree /etc/systemd/system

실제로 시스템 시작 속도를 늦춘 오래된 / 버기 장치를 알아 내고 나중에 systemctl disable명령을 사용하여 비활성화하는 것이 실제로 유용했습니다 .

편집하다

즉,이 기본 기능은 그래픽 도구가 아닌 명령 줄 도구를 통해 제공되어야한다는 OP에 동의합니다. X를 시작할 수 없으면 어떻게됩니까? 그러면 svg 파일을 어떻게 처리합니까?

실제로 방법이 있습니다. scp(ssh 도구)를 사용 하여 다른 컴퓨터에서 파일을 가져올 수없는 경우 fbi실제로 도움이 될 수 있습니다. :)

sudo systemd-analyze plot > /home/user/startup.svg
fbi /home/user/startup.svg

내 TTY에서 일했습니다. 화살표로 그림 내부를 탐색하십시오. 확대 / 축소 옵션이 fbi -h있습니다.

다시 한 번 도움이 되었기를 바랍니다. Archlinux와 Ubuntu repos에서 사용할 수 있습니다.

편집 2 :

fbissh에서는 작동하지 않습니다. 이런 식으로 X 전달을 수행 할 수 ssh -Y user@server있지만 원격 서버에서 실행중인 X 서버가 필요합니다.

여기에 가장 좋은 방법은 사용하는 것 sshfs입니다. 예를 들어 노틸러스와 같이 사용자 공간에서 훌륭하게 작동합니다. 해야 할 작은 구성이 있습니다.

sudo vim /etc/fuse.conf #type a, uncomment the user_allow_other line and ESC :wq
sudo mkdir /mnt/yourmountingdir
sudo chown user:user /mnt/yourmountingdir
sshfs user@remotemachine.com:/home/user /mnt/yourmountingdir/ -o allow_other #Asks for host trusting and password
sudo fusermount -u /mnt/yourmountingdir/ #To disconnect and unmount

문제는 의존성 해결 후 시스템화 된 모든 활성화 된 장치의 실행 트리에 관한 것입니다. 따라서이 답변은 미스입니다.
갤럭시

아마도 귀하의 질문은 기능 요청에 적합합니까? 도움이 될 것입니다. 어쨌든, 나는 당신의 질문에 걸림돌이 된 후에이 답변을 게시했습니다. 특히 System V init와 편리한 rc.conf 파일을 잃어버린 후 어려움을 겪고있는 사람들에게 특히 도움이되었습니다. 내 대답이 맞지 않아서 죄송합니다. 하지만 공감할 가치가 없습니다.
Joel.O

문제에 대한 해결 방법으로 편집했습니다. 다시 도움이 되길 바랍니다.
Joel.O

내 서버에서 ssh를 통해 fbi를 사용할 수 없었습니다. 그러나 sshfs더 잘 작동합니다. 편집 2 참조.
Joel.O
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.