Có cách nào để xem cây thực thi của systemd không?


63

Ý tôi là trong câu hỏi là: có cách nào để loại bỏ danh sách được sắp xếp (như pstree làm cho các quy trình) để xem cách systemd thực thi tập đơn vị được cung cấp, tức là cây sau khi các phụ thuộc được giải quyết và các công việc được xếp hàng để thực thi ? Tôi biết rằng bạn có thể làm điều đó bằng cách phân tích dữ liệu trạng thái systemd, nhưng có cách nào nhanh chóng để nhìn thấy một cây như vậy không? Nó sẽ giúp ích rất nhiều cho việc điều tra thất bại (ví dụ nếu bạn thấy rằng quá trình khởi động bị kẹt ở một số đơn vị, bạn sẽ có thể xác định vị trí gần đúng để điều tra sâu hơn.


Tôi đã tạo một công cụ trực quan cho systemd. Bạn có thể kiểm tra và dùng thử công cụ trong github.com/ywiyogo/systemd-visual
Yongkie

Câu trả lời:


71

systemd-analyzelà bạn của bạn. Ví dụ systemd-analyze critical-chainđầu ra chặn cây daemon. Của tôi chẳng hạn:

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 trong ví dụ về cơ bản giữ toàn bộ khởi động.

Nếu bạn muốn có chế độ xem chi tiết hơn, bạn có thể kết xuất toàn bộ chuỗi thực thi trong tệp svg. systemd-analyze plot > something.svgxuất toàn bộ chuỗi (hơn 120 mô-đun) dưới dạng các thanh tiến trình thành tệp svg có độ phân giải cao hiển thị trạng thái, bị chặn và các vấn đề khác.

Cuối cùng, bạn có systemd-analyze dotcông cụ xuất ra tệp chấm xuất ra toàn bộ phân cấp: systemd-analyze dot | dot -Tpng -o stuff.png với công cụ dấu chấm, bạn cũng có thể xuất nó dưới dạng tệp ps và svg.

Tất cả các công cụ trên đều được tích hợp sẵn trong công cụ phân tích systemd, mặc định có systemd trong archlinux ít nhất. Tôi nghĩ rằng có một số dự án bên thứ 3 cũng đối phó với nó.


Cảm ơn câu trả lời của bạn, tuy nhiên nó không giải quyết được các câu hỏi và chỉ nhắc lại các phần của câu hỏi của tôi (tôi đã đề cập rằng tôi biết cách làm thế nào bằng cách phân tích dữ liệu trạng thái của systemd). Do đó, câu hỏi là làm thế nào để có được một cây giống như pstree của chuỗi khởi động sau khi tất cả các phụ thuộc được giải quyết (ví dụ: hậu khởi động). Chuỗi quan trọng gần như là nó (mặc dù nó là một cây từ dưới lên) nhưng không liệt kê tất cả các đơn vị bắt đầu. Điều được hỏi trong câu hỏi: một cây liệt kê mọi đơn vị đã được thực thi cho đến một thời điểm nào đó (ví dụ: nhấn multi-user.target).
thiên hà

4
systemd-analyze plot > something.svgcó đầy đủ ba lần thực hiện với các mục tiêu (nó gần nhất với những gì bạn muốn). chấm phân tích hệ thống là biểu đồ đầy đủ của các phụ thuộc (nó là biểu diễn chính xác nhất). Đây có phải là những gì bạn muốn? Trong cốt truyện chỉ cần tìm mục tiêu và xem những gì nó cần quá được chạy. Các phụ thuộc tương tự là biểu đồ được liệt kê chính xác, nếu nó kích hoạt nhiều bộ công cụ phân tích biểu đồ và chọn điểm biểu đồ mà bạn muốn xem phụ thuộc (công cụ dấu chấm có nhiều cài đặt hơn). Xem trang man: freedesktop.org/software/systemd/man/systemd-analyze.html --order và tương tự
IBr

1
Từ trang man: Điều này vẽ tất cả các phụ thuộc của bất kỳ đơn vị nào có tên bắt đầu bằng "avahi-daemon.": $ systemd-analyze dot 'avahi-daemon.*' | dot -Tsvg > avahi.svg $ eog avahi.svgĐiều này vẽ các phụ thuộc giữa tất cả các đơn vị mục tiêu đã biết:systemd-analyze dot --to-pattern='*.target' --from-pattern='*.target' | dot -Tsvg > targets.svg $ eog targets.svg
IBr

1
Thật không may, nhưng điều này không thể sử dụng được trong bảng điều khiển văn bản. Tôi thực sự đánh giá cao thời gian bạn dành cho câu trả lời (và nó chính xác nếu bạn muốn lấy một số dữ liệu để phân tích), nhưng nó không giải quyết được câu hỏi ban đầu, vì vậy tôi có thể chấp nhận nó. Lấy làm tiếc.
thiên hà

1
OK không có vấn đề. Tôi yêu bản thân các công cụ dòng lệnh :)
IBr

13

Có thể vẫn chưa trả lời đầy đủ câu hỏi của bạn nhưng hãy thử với --fuzztùy chọn

systemd-analyze critical-chain --fuzz 1h

Lưu ý: Bạn cũng có thể chỉ định đơn vị s để xem họ quan trọng chuỗi , vì vậy bạn không giới hạn ở những multi-user.target

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

Hi vọng điêu nay co ich


12

Không chắc chắn tôi hiểu đúng câu hỏi, nhưng có các hình ảnh cây có sẵn với các lệnh sau:

sudo systemctl status

Và cũng:

sudo systemctl list-dependencies 

Hi vọng điêu nay co ich :)

Ngoài ra, nó có thể hữu ích cho các mục đích khác để xây dựng một cây của các thư mục liên kết hệ thống:

tree /etc/systemd/system

Nó thực sự hữu ích khi tìm ra các đơn vị cũ / lỗi đang làm chậm quá trình khởi động hệ thống của tôi, để vô hiệu hóa chúng sau đó bằng cách sử dụng systemctl disablelệnh.

BIÊN TẬP

Điều đó nói rằng tôi thực sự đồng ý với OP rằng chức năng cơ bản này phải được cung cấp thông qua các công cụ dòng lệnh chứ không phải là một công cụ đồ họa ... Nếu bạn không thể khởi động X thì sao? Làm thế nào bạn đối phó với tập tin svg của bạn sau đó?

Thật ra, có một cách. Nếu bạn không thể sử dụng scp(công cụ ssh) để tìm nạp tệp của mình trên máy tính khác, fbithực sự có thể giúp bạn :)

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

Làm việc trong TTYs của tôi. Chỉ cần điều hướng bên trong hình ảnh với mũi tên. Có tùy chọn phóng to, để liệt kê làm fbi -h.

Một lần nữa tôi hy vọng điều này sẽ giúp. Nó có sẵn trong replin Archlinux và Ubuntu.

EDIT 2:

fbikhông làm việc trên ssh. Bạn có thể thực hiện chuyển tiếp X như thế này ssh -Y user@server, nhưng bạn cần một máy chủ X chạy trên máy chủ từ xa của bạn.

Đặt cược tốt nhất ở đây là sử dụng sshfs. Nó hoạt động TUYỆT VỜI trong không gian người dùng, ví dụ với nautilus. Có một cấu hình nhỏ để làm, xem:

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

Câu hỏi là về cây thực thi cho tất cả các đơn vị kích hoạt systemd đã đi qua sau khi giải quyết phụ thuộc. Vì vậy, câu trả lời này là một bỏ lỡ.
thiên hà

Có lẽ câu hỏi của bạn được trang bị tốt cho một yêu cầu tính năng? Chắc chắn nó sẽ giúp. Dù sao, tôi đã đăng câu trả lời này sau khi vấp phải câu hỏi của bạn bởi vì nó giống với câu hỏi khác mà tôi cần một số thông tin và tôi cảm thấy rằng một số ví dụ cơ bản thiếu (như những điều bạn đã thử và không hoạt động - thực sự sẽ có đã giúp làm rõ), đặc biệt là đối với những người như tôi đang vật lộn sau khi mất init System V và tệp RC.conf tiện dụng của họ. Xin lỗi, câu trả lời của tôi không phù hợp. Không có giá trị một downvote mặc dù.
Joel.O

Chỉnh sửa với một cách giải quyết vấn đề của bạn. Hy vọng nó sẽ giúp một lần nữa.
Joel.O

Tôi không thể sử dụng fbi trên ssh trên máy chủ của mình. Nhưng sshfshoạt động thậm chí còn tốt hơn. Xem EDIT 2.
Joel.O
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.