“ งานหยุด” คืออะไรใน“ หยุดงานกำลังทำงาน…”


28

หลังจากที่มีการใช้คำสั่ง shutdown บางครั้งได้รับข้อความสถานะเช่นนี้:

A stop job is running for Session 1 of user xy

จากนั้นระบบจะหยุดทำงานชั่วขณะหนึ่งหรือตลอดไปขึ้นอยู่กับ ???

ดังนั้น "หยุดงาน" คืออะไร?

นอกจากนี้บางครั้งเหตุใดจึงประมาณเวลาที่จะใช้ค่อนข้างแม่นยำและเวลาอื่นที่สามารถทำงานได้ตลอดไป


1
บางทีมันควรจะหยุดงาน? เซสชั่นหยุดงานซึ่งไม่ได้ทำงานจริงและไม่มีโอกาสตอบสนองต่อสัญญาณการเลิกจ้าง
Kaz

คำตอบ:


27

systemd ดำเนินการภายในเป็นคิว "งาน" แต่ละงาน (ลดความซับซ้อนลงเล็กน้อย) คือการกระทำที่ต้องทำ: หยุด, ตรวจสอบ, เริ่มต้นหรือเริ่มหน่วยใหม่

เมื่อ (เช่น) คุณสั่งให้ systemd เริ่มหน่วยบริการมันจะทำรายการหยุดและเริ่มงานสำหรับหน่วยใด ๆ (หน่วยบริการหน่วยเมาท์หน่วยอุปกรณ์และอื่น ๆ ) จำเป็นสำหรับการบรรลุเป้าหมายนั้นตาม ข้อกำหนดของหน่วยและการอ้างอิงสั่งซื้อตามความสัมพันธ์ในการสั่งซื้อหน่วยทำงานออกและ (ถ้าเป็นไปได้) แก้ไขความขัดแย้งของตนเองและ (หากขั้นตอนสุดท้ายนั้นสำเร็จ) จะวางลงในคิว

จากนั้นจะพยายามดำเนินการ "งาน" ที่จัดคิว

งานหยุดทำงานสำหรับเซสชันที่ 1 ของผู้ใช้ xy

หน่วยชื่อที่แสดงSession 1 of user xyที่นี่เป็น นี่จะเป็น (จากชื่อที่แสดง) ของหน่วยเซสชันไม่ใช่หน่วยบริการ นี่คือเซสชั่นการเข้าสู่ระบบของพื้นที่ผู้ใช้ที่เป็นนามธรรมซึ่งดูแลโดยlogindโปรแกรมของ systemd และปลั๊กอิน PAM เป็น (ในสาระสำคัญและในทางทฤษฎี) การจัดกลุ่มของกระบวนการทั้งหมดที่ผู้ใช้นั้นเรียกใช้เป็น "เซสชันการเข้าสู่ระบบ" ที่ใดที่หนึ่ง

งานที่ได้รับการ enqueued stopกับมันเป็น และมันอาจจะใช้เวลานานเพราะคน systemd ได้แฟทต์ไม่สมควรเซสชั่นhangupกับเซสชั่นปิด พวกเขาแบ่งอดีตเพื่อให้คนหลังทำงานและในการตอบสนองบางคนเปลี่ยน systemd เพื่อทำลายคนหลังเพื่อรับอดีตให้ทำงาน คน systemd จริง ๆ ควรตระหนักว่าพวกเขามีสองสิ่ง

ในช่วงการเข้าสู่ระบบของคุณคุณมีสิ่งที่ละเว้นหรือว่าใช้เวลานานที่จะยุติเมื่อได้เห็นSIGTERM SIGTERMกระแทกแดกดันอดีตเป็นพฤติกรรมที่ยาวนานของบางเชลล์ควบคุมงาน วิธีที่ถูกต้องในการยกเลิกผู้นำเซสชันการเข้าสู่ระบบเมื่อพวกเขาเป็นเชลล์ควบคุมงานเฉพาะเหล่านี้คือการบอกพวกเขาว่าเซสชันนั้นถูกวางสายแล้วพวกเขาจะยุติงานทั้งหมดของพวกเขา (งานประเภทอื่นกับงาน systemd ภายใน) ยุติตัวเอง

อะไรจริงที่เกิดขึ้นเป็น systemd ที่รอคอยของหน่วยหมดเวลาหยุดSIGKILLจนกว่าจะรีสอร์ท การหมดเวลานี้สามารถกำหนดค่าต่อหน่วยแน่นอนและสามารถตั้งค่าให้หมดเวลาไม่เคย ดังนั้นทำไมคนหนึ่งอาจเห็นพฤติกรรมที่แตกต่างกัน

อ่านเพิ่มเติม


1
ตามคำตอบนี้unix.stackexchange.com/a/297318/224025เราสามารถเปลี่ยนเวลานี้ ปลอดภัยหรือไม่ (หรือจะทำอันตรายใด ๆ ) หากฉันเปลี่ยนเป็นศูนย์วินาที
GypsyCosmonaut

1
จริงๆแล้วย่อหน้าสุดท้ายของคำตอบนี้และคู่มือผู้ใช้ที่ฉันแนะนำให้คุณสำหรับการอ่านเพิ่มเติมได้บอกคุณเกี่ยวกับการเปลี่ยนการหมดเวลา คำถามเกี่ยวกับการหมดเวลาของ 0s หมายความว่าอย่างไรและปลอดภัยหรือไม่ที่จะจ้างงานควรถามคำถามต่อHow to Askเนื่องจากเป็นคำถามต่อจากคำถามที่ว่า "หยุดงาน" คืออะไรและสาเหตุที่การหมดเวลาแตกต่างกันไป ฉันสงสัยว่ามันอาจจะเป็นสิ่งที่ดี
JdeBP

2

ข้อความเหล่านี้มาจาก systemd ซึ่งเป็นระบบเริ่มต้นที่เริ่มต้นและหยุดงาน งานสามารถเป็น daemons แต่ยังสามารถทำงานเล็ก ๆ น้อย ๆ เช่นการติดตั้งและยกเลิกการต่อเชื่อมดิสก์การลบ / tmp หรือบันทึกและกู้คืนความสว่างของหน้าจอในการบู๊ต systemctl list-unitsช่วยให้คุณมีความคิด Systemd ใช้ "unit" และ "job" เพื่อหมายถึงสิ่งเดียวกัน

เมื่องานถูกหยุดเช่นเดียวกับsystemctl stop ...คำถามคือระยะเวลาที่รอให้งานเสร็จก่อนที่จะประกาศความล้มเหลวและฆ่ากระบวนการของงานด้วยSIGKILLสัญญาณ เราไม่ต้องการใช้SIGKILLเว้นแต่เราจะต้องทำเพราะมันไม่ได้ให้โอกาสสำหรับกระบวนการที่จะออกอย่างหมดจด สำหรับบางกระบวนการไม่กี่วินาทีอาจมีเวลาเหลือเฟือที่จะประกาศความล้มเหลวสำหรับกระบวนการอื่น ๆ เช่นฐานข้อมูลอาจมีเครือข่ายและดิสก์ I / O จำนวนมากสำหรับงานที่จะหยุดอย่างสะอาดและดังนั้นเราอาจให้หน่วยเหล่านั้นปิดลงอย่างหมดจด .

สิ่งที่คุณเห็นเมื่อปิดระบบนั้นเทียบเท่ากับsystemctl stop $UNIT_NAMEที่ใช้เวลาในการทำงาน มีตัวนับซึ่งแสดงวินาทีที่ผ่านไปและเวลารอสูงสุดก่อนที่ SIGKILL จะออกและการปิดระบบจะดำเนินการโดยไม่คำนึงถึง

เว้นแต่จะมีเหตุผลที่ดีที่คาดว่าจะมีความล่าช้าเป็นเวลานานซึ่งมักจะบ่งบอกถึงความผิดปกติบางอย่าง นั่นอาจอยู่ในช่วงจากเซิร์ฟเวอร์ DHCP ที่ไม่ตอบสนองต่อการเปิดตัวและการกระทำของ Release จำเป็นต้องหมดเวลาหรือข้อผิดพลาดบางอย่างทำให้ daemon ไม่เคยออก


"Systemd ใช้" unit "และ" job "เพื่อหมายถึงสิ่งเดียวกันมาก" ฉันไม่คิดว่ามันจะเป็นจริง: พูดโดยประมาณ "งาน" คือคำขอให้ทำอะไรกับ "หน่วย" ดูคำตอบของ @ JdeBP สำหรับรายละเอียด
โทมัส

1

บริการบางอย่างค้างอยู่และ systemd กำลังรอให้บริการออก Systemd อาจไม่ถูกต้องแม่นยำประมาณเวลาที่ใช้เวลาเวลา (โดยทั่วไป 90 วินาที) คือระยะเวลาที่ systemd จะรอก่อนที่จะหมดความอดทน ดูโพสต์นี้:

งานหยุดทำงานสำหรับเซสชัน c2 ของผู้ใช้


6
ฉันจะทราบได้อย่างไรว่าบริการใดค้าง
naitsirch

0

"หยุดงาน" คือเมื่อsystemdกำลังรอ "งาน" ที่เฉพาะเจาะจงเพื่อหยุดเช่นกระบวนการบางอย่างที่กำลังรอให้เสร็จก่อนที่จะดำเนินการต่อไป หากคุณเห็นข้อความเตือนว่า "งานหยุดทำงานกำลังทำงาน ... " (ฯลฯ ) ในทางเทคนิคหมายความว่ามีบางสิ่งที่ค้างอยู่ในคิวงาน

อย่างไรก็ตามก่อนที่จะขุดผ่านคิวงานทั้งหมดของระบบของคุณโปรดจำไว้ว่าบางครั้งข้อความเตือนเหล่านี้เป็นผลมาจากปัจจัยทางอ้อม(ในความเป็นจริงข้อความจะถูกอ้างอิงถึง GitHub repo ของพวกเขาเป็นข้อผิดพลาดที่เป็นไปได้)

ตัวอย่างเช่น: เราได้รับข้อความ "หยุดงาน" ที่เกี่ยวข้องและไม่สามารถหาสาเหตุได้ว่าทำไม .... ปรากฎว่าดิสก์นั้นเกือบจะหมดแล้วและมันเริ่มทำให้ระบบปฏิบัติการมีพฤติกรรมแปลก ๆ

การอัปเกรดเซิร์ฟเวอร์ไปยังดิสก์ที่มีขนาดใหญ่ขึ้นและทำการรีบูตเครื่องจะแก้ไข)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.