Chính xác thì một công việc dừng lại là gì, như trong một công việc dừng lại đang chạy trên phạm vi?


28

Sau khi lệnh tắt được đưa ra, đôi khi người ta nhận được một thông báo trạng thái như thế này:

A stop job is running for Session 1 of user xy

và sau đó hệ thống bị treo trong một thời gian, hoặc mãi mãi tùy thuộc vào ???

Vậy chính xác thì "công việc dừng lại" là gì?

Ngoài ra, tại sao đôi khi nó ước tính thời gian nó sẽ mất, khá chính xác, và những lần khác nó có thể chạy mãi mãi?


1
Có lẽ nên dừng công việc? Phiên này đã dừng các công việc, thực tế không chạy, và vì vậy không có cơ hội phản hồi các tín hiệu chấm dứt.
Kaz

Câu trả lời:


27

systemd hoạt động nội bộ theo hàng đợi "công việc". Mỗi công việc (đơn giản hóa một chút) là một hành động cần thực hiện: dừng, kiểm tra, bắt đầu hoặc khởi động lại một đơn vị cụ thể .

Khi (ví dụ) bạn hướng dẫn systemd khởi động một đơn vị dịch vụ , nó sẽ lập danh sách các công việc dừng và bắt đầu cho bất kỳ đơn vị nào (đơn vị dịch vụ, đơn vị gắn kết, đơn vị thiết bị, v.v.) là cần thiết để đạt được mục tiêu đó, theo yêu cầu đơn vị và phụ thuộc, đặt hàng chúng, theo mối quan hệ đặt hàng đơn vị, giải quyết và (nếu có thể) khắc phục mọi mâu thuẫn bản thân và (nếu bước cuối cùng đó thành công) sẽ đặt chúng vào hàng đợi.

Sau đó, nó cố gắng thực hiện các "công việc" mê hoặc.

Một lệnh dừng đang chạy cho Phiên 1 của người dùng xy

Tên hiển thị đơn vị ở đây là Session 1 of user xy. Đây sẽ là (từ tên hiển thị) một đơn vị phiên , không phải đơn vị dịch vụ . Đây là bản tóm tắt phiên đăng nhập không gian người dùng được duy trì bởi logindchương trình của systemd và các plugin PAM của nó. Đó là (về bản chất và lý thuyết) là một nhóm tất cả các quy trình mà người dùng đang chạy dưới dạng "phiên đăng nhập" ở đâu đó.

Công việc đã được chinh phục chống lại nó là stop. Và có lẽ phải mất một thời gian dài bởi vì những người làm hệ thống đã nhầm lẫn giữa phiên bị treo máy với việc tắt phiên . Họ phá vỡ cái trước để làm cho cái sau hoạt động, và đáp lại một số người thay đổi systemd để phá vỡ cái sau để làm cho cái trước hoạt động. Những người hệ thống thực sự nên nhận ra rằng họ là hai thứ khác nhau.

Trong phiên đăng nhập của bạn, bạn có một cái gì đó bỏ qua SIGTERMhoặc phải mất một thời gian dài để chấm dứt một khi nó đã thấy SIGTERM. Trớ trêu thay, trước đây là hành vi lâu đời của một số vỏ kiểm soát công việc. Cách chính xác để chấm dứt các nhà lãnh đạo phiên đăng nhập khi họ là những trình điều khiển công việc cụ thể này là nói với họ rằng phiên này đã bị treo , sau đó họ chấm dứt tất cả các công việc của họ (một loại công việc khác với công việc hệ thống nội bộ) và sau đó tự chấm dứt.

Điều thực sự xảy ra là systemd đang chờ thời gian chờ của đơn vị cho đến khi nó dừng lạiSIGKILL . Thời gian chờ này là cấu hình trên mỗi đơn vị, tất nhiên, và có thể được đặt thành không bao giờ hết thời gian. Do đó tại sao người ta có thể thấy các hành vi khác nhau.

đọc thêm


1
Theo câu trả lời này, unix.stackexchange.com/a/297318/224025 chúng ta có thể thay đổi lần này. Nó có an toàn không (hoặc nó có gây hại gì không) nếu tôi thay đổi nó thành 0 giây?
GypsyCosmonaut

1
Trên thực tế, đoạn cuối cùng của câu trả lời này và hướng dẫn sử dụng mà tôi hướng dẫn bạn để đọc thêm đã cho bạn biết về việc thay đổi thời gian chờ. Một câu hỏi về thời gian chờ 0 giây có nghĩa là gì và có an toàn khi sử dụng nên được hỏi như một câu hỏi cho mỗi câu hỏi như thế nào bởi vì đây là câu hỏi tiếp theo cho câu hỏi "dừng công việc" là gì và tại sao thời gian chờ lại khác nhau. Tôi nghi ngờ rằng nó có thể là một trong những tốt.
JdeBP

2

Các thông báo này là từ systemd, là một hệ thống init khởi động và dừng công việc. Các công việc có thể là trình nền, nhưng cũng có thể thực hiện một số tác vụ nhỏ như gắn và ngắt đĩa, xóa / tmp hoặc lưu và khôi phục độ sáng màn hình khi khởi động. systemctl list-unitscung cấp cho bạn ý tưởng. Systemd sử dụng "đơn vị" và "công việc" có nghĩa tương tự như vậy.

Khi một công việc đang bị dừng lại, như systemctl stop ...một câu hỏi đặt ra là phải đợi bao lâu để công việc hoàn thành trước khi tuyên bố thất bại và giết chết các quy trình của công việc bằng SIGKILLtín hiệu. Chúng tôi thực sự không muốn sử dụng SIGKILLtrừ khi chúng tôi phải làm, vì nó không tạo cơ hội cho quá trình thoát ra một cách sạch sẽ. Đối với một số quy trình, một vài giây có thể có nhiều thời gian để tuyên bố thất bại, đối với các quy trình khác như cơ sở dữ liệu, có thể có mạng I / O đáng kể để công việc dừng hoàn toàn, và do đó chúng tôi có thể cho các đơn vị đó vài phút để tắt sạch .

Những gì bạn đang thấy khi tắt máy là tương đương với systemctl stop $UNIT_NAMEviệc mất một thời gian để chạy. Có một bộ đếm hiển thị giây trôi qua và thời gian chờ tối đa trước khi SIGKILL sẽ được phát hành và việc tắt máy được tiến hành bất kể.

Trừ khi có những lý do chính đáng để mong đợi một sự chậm trễ lâu dài, điều này thường chỉ ra một số trục trặc. Điều đó có thể bao gồm từ máy chủ DHCP không phản hồi với Bản phát hành và do đó, hành động Phát hành cần hết thời gian hoặc một số lỗi khiến trình nền không bao giờ thoát.


"Systemd sử dụng" đơn vị "và" công việc "có nghĩa là nhiều điều tương tự." Tôi không nghĩ đó là sự thật: nói một cách đại khái, một "công việc" là một yêu cầu để làm một cái gì đó cho một "đơn vị". Xem câu trả lời của @ JdeBP để biết chi tiết.
Thomas


0

"Dừng công việc" là khi systemdđang chờ một "công việc" cụ thể dừng lại, ví dụ như một số quy trình đang chờ hoàn thành trước khi tiếp tục. Nếu bạn thấy một thông báo cảnh báo rằng "một công việc dừng đang chạy ..." (v.v.) về mặt kỹ thuật có nghĩa là một cái gì đó đang chờ xử lý trong hàng đợi công việc.

Tuy nhiên, trước khi đào sâu toàn bộ hàng đợi công việc hệ thống của bạn, hãy nhớ rằng đôi khi các thông báo cảnh báo này là kết quả gián tiếp từ các yếu tố môi trường (thực tế, thông báo thậm chí còn được tham chiếu trên repo GitHub của chúng như một lỗi có thể xảy ra).

Ví dụ: chúng tôi đã nhận được các tin nhắn liên quan đến "dừng công việc" và không thể hiểu tại sao .... hóa ra, đĩa gần hết dung lượng và nó bắt đầu khiến HĐH hoạt động kỳ lạ.

Nâng cấp máy chủ lên một đĩa lớn hơn và khởi động lại đã sửa nó;)

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.