ต้องการ vs vs Wantsในไฟล์เป้าหมายต่างกันหรือไม่?
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
ขอบคุณ
ต้องการ vs vs Wantsในไฟล์เป้าหมายต่างกันหรือไม่?
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
ขอบคุณ
คำตอบ:
ดังที่ heemayl ระบุไว้ในความคิดเห็นหน้า man ตอบคำถามของคุณ จากเว็บ:
ต้องการ =
เวอร์ชันที่อ่อนแอกว่าของ Need = หน่วยที่ระบุไว้ในตัวเลือกนี้จะเริ่มต้นหากหน่วยกำหนดค่าคือ อย่างไรก็ตามหากหน่วยงานที่จดทะเบียนไม่สามารถเริ่มต้นหรือไม่สามารถเพิ่มลงในการทำธุรกรรมนี้จะไม่มีผลกระทบต่อความถูกต้องของการทำธุรกรรมโดยรวม นี่เป็นวิธีที่แนะนำในการเริ่มระบบของอุปกรณ์หนึ่งเข้ากับการเริ่มระบบของอุปกรณ์อื่น
และต้องการ =:
กำหนดค่าการพึ่งพาความต้องการในหน่วยอื่น ๆ หากหน่วยนี้ได้รับการเปิดใช้งานหน่วยที่ระบุไว้ที่นี่จะเปิดใช้งานเช่นกัน หากหนึ่งในหน่วยอื่น ๆ ถูกปิดการใช้งานหรือการเปิดใช้งานล้มเหลวหน่วยนี้จะถูกปิดการใช้งาน ตัวเลือกนี้อาจมีการระบุมากกว่าหนึ่งครั้งหรืออาจมีการระบุหน่วยที่คั่นด้วยช่องว่างหลายรายการในหนึ่งตัวเลือกซึ่งการขึ้นอยู่กับความต้องการของกรณีสำหรับชื่อที่แสดงทั้งหมดจะถูกสร้างขึ้น โปรดทราบว่าการพึ่งพาความต้องการไม่มีผลต่อลำดับที่บริการเริ่มหรือหยุดทำงาน สิ่งนี้จะต้องถูกกำหนดค่าอย่างอิสระด้วยตัวเลือก After = or Before = หากยูนิต foo.service ต้องการยูนิต bar.service ตามที่กำหนดค่าไว้ด้วย Need = และไม่มีการกำหนดค่าการสั่งซื้อด้วย After = หรือ Before = จากนั้นทั้งสองหน่วยจะเริ่มพร้อมกันและไม่มีการหน่วงเวลาระหว่างกันหาก foo.service เปิดใช้งาน บ่อยครั้ง,
โปรดทราบว่าประเภทการพึ่งพานี้ไม่ได้หมายความว่าหน่วยอื่น ๆ จะต้องอยู่ในสถานะใช้งานอยู่เมื่อหน่วยนี้ทำงานอยู่ โดยเฉพาะ: การตรวจสอบเงื่อนไขที่ล้มเหลว (เช่น ConditionPathExists =, ConditionPathExists =, … - ดูด้านล่าง) จะไม่ทำให้งานเริ่มต้นของหน่วยที่ต้องการการพึ่งพา = นั้นล้มเหลว นอกจากนี้หน่วยบางประเภทอาจปิดการใช้งานด้วยตัวเอง (ตัวอย่างเช่นกระบวนการบริการอาจตัดสินใจออกอย่างหมดจดหรืออุปกรณ์อาจถูกถอดปลั๊กโดยผู้ใช้) ซึ่งไม่ได้แพร่กระจายไปยังหน่วยที่ต้องใช้ = พึ่งพา ใช้ประเภท BindsTo = การพึ่งพาพร้อมกับ After = เพื่อให้แน่ใจว่าหน่วยอาจจะไม่เคยอยู่ในสถานะใช้งานโดยไม่มีหน่วยอื่น ๆ ที่เฉพาะเจาะจงอยู่ในสถานะใช้งาน (ดูด้านล่าง)
บริการของคุณจะเริ่มต้นเมื่อถึงmulti-user.targetแล้ว (ฉันไม่รู้ว่าจะเกิดอะไรขึ้นหากคุณพยายามเพิ่มลงในเป้าหมายนั้น) และ systemd จะพยายามเริ่มต้นdisplay-manager.serviceก่อนบริการของคุณ . หากdisplay-manager.serviceล้มเหลวไม่ว่าด้วยเหตุผลใดก็ตามบริการของคุณจะยังคงเริ่มทำงาน (ดังนั้นหากคุณต้องการ display-manager ใช้Requires=
สำหรับสิ่งนั้น) หากไม่สามารถเข้าถึงmulti-user.targetได้บริการของคุณจะไม่ถูกเปิดใช้งาน
บริการของคุณคืออะไร? มันเป็นระบบ kiosk หรือไม่? สังหรณ์ใจผมอยากสมมติว่าคุณต้องการที่จะเพิ่มบริการของคุณเพื่อ multi-user.target (เพื่อเปิดตัวเมื่อเริ่มต้น) และมีมันอย่างเคร่งครัดขึ้นอยู่กับการแสดงผล manager.serviceRequires=display-manager.service
ผ่าน แต่นั่นเป็นเพียงการคาดเดาป่าตอนนี้
การปรับใช้เซิร์ฟเวอร์ของเราใช้ LDAP ที่มี ID ผู้ใช้ทั้งหมดและแผนที่อัตโนมัติ โฮมไดเร็กทอรีของผู้ใช้จะถูกเมาท์ NFS และโดยทั่วไปผู้ใช้จะสร้าง @reboot cronjobs ด้วยรหัสปฏิบัติการในโฮมไดเร็กทอรีของพวกเขา นอกจากนี้เรายังใช้ sssd สำหรับแคช จำเป็นต้องพูดว่าเรามีความเชื่อมั่นอย่างสูงในการให้คำสั่งบูตที่กำหนดไว้สำหรับการกำหนดค่านี้เพื่อให้ทำงานได้ เราได้พัฒนาการกำหนดค่า systemd ที่รัดกุมมากและได้ค้นพบความแตกต่างที่ไม่ชัดเจนระหว่างตัวเลือกส่วน "ต้องการ" และ "ต้องการ"
หากคุณมีความล้มเหลวของบริการระหว่างการบู๊ตและมีบริการอื่นที่ขึ้นอยู่กับ "ต้อง" ในบริการนั้นด้วย "restart = always" ตั้งค่าเป็นตัวเลือกบริการบริการที่ขึ้นอยู่กับนั้นจะไม่เริ่มต้นใหม่ อย่างไรก็ตามหากคุณมี "ต้องการ" เป็นตัวเลือกบริการที่อ้างอิงจะรีสตาร์ทตามที่คาดไว้
man systemd.unit