สับสนเกี่ยวกับ“ /etc/init.d” และบริการใน“ / lib / systemd / system”


15

ฉันยังใหม่กับโลกของลินุกซ์ดังนั้นฉันจึงขอโทษสำหรับสิ่งผิดปกติ

ฉันพยายามเรียกใช้ Mongo DB บนเครื่อง Debian 8.5 เมื่อฉันติดตั้งแพคเกจ (สร้างไว้ล่วงหน้าจาก percona.com) ฉันสังเกตเห็นไฟล์ต่อไปนี้:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

เกี่ยวกับ /etc/init.d/mongod

ฉันเข้าใจว่าสิ่งนี้เรียกว่า (ตราบใดที่มีการลงทะเบียนผ่านupdate-rc.d) ที่บูต / ในสถานะระบบอื่น ๆ (ไม่ต้องการรับข้อมูลทางเทคนิคเกี่ยวกับเรื่องนี้ฉันดูดซับข้อมูลจำนวนมากและสิ่งนี้ดูมีความสำคัญน้อยกว่า)

นี่เป็นสิ่งที่ดีที่สุดสำหรับฉัน สคริปต์ทำการเริ่มต้นจำนวนมากและเปิด mongo daemon ในที่สุด มันดูเหมือนว่าจะมี“ทริกเกอร์” สำหรับการเริ่มต้น, หยุด, รีสตาร์ท ฯลฯ sudo service mongod <action>และเท่าที่ผมเข้าใจว่าฉันสามารถเรียกผู้ที่มี

เกี่ยวกับ /lib/systemd/system/mongod.service

ไฟล์นี้ดูเหมือนจะทำสิ่งเดียวกัน (เช่นเรียกใช้ mongo) แต่มีการกำหนดค่าน้อยกว่าเพียงหนึ่งบรรทัดในพารามิเตอร์ ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

sudo systemctl start mongodเท่าที่ผมเข้าใจในเรื่องนี้สามารถถูกเรียกด้วย

  • ฉันไม่เข้าใจว่าจะเรียกสิ่งนี้ตอนบูทหรือไม่

  • ฉันไม่เข้าใจว่าทำไมความต้องการไฟล์ 'service' สองไฟล์นี้และฉันจะกำจัดไฟล์ได้อย่างไร (อาจเป็นไฟล์ใน / lib / systemd เนื่องจากมันง่ายกว่ามาก)

  • ฉันไม่เข้าใจว่ามีความสัมพันธ์ระหว่างสองหรือไม่

  • ฉันได้อ่านที่systemctlทำงานในสคริปต์เกินไปและในกรณีนี้ผมไม่เข้าใจว่าที่ของทั้งสองไฟล์จะถูกเรียกโดยinit.dsystemctl mongod start

ฉันคิดว่ามีความซ้ำซ้อนและฉันควรเลือกเพียงหนึ่งในสองวิธี และฉันต้องการให้แน่ใจว่ามันเป็น

  • เรียกว่าบูต
  • callable โดยคำสั่ง (เช่นserviceหรือsystemctl)

คุณช่วยฉันล้างใจของฉันได้ไหม ด้วยความช่วยเหลือของความคิดเห็นบางอย่างฉันอาจจะสามารถมุ่งเน้นและแคบลงคำถาม

คำตอบ:


12

เมื่อคุณมีทั้งinit.dสคริปต์และ.serviceไฟล์systemd ที่มีชื่อเดียวกัน systemd จะใช้ไฟล์บริการสำหรับการดำเนินการทั้งหมด ฉันเชื่อว่าserviceคำสั่งจะเปลี่ยนเส้นทางไปยัง systemd สคริปต์ init.d จะถูกละเว้น

systemdใช้ มันใหม่ใน Debian 8 แต่เป็นค่าเริ่มต้น เซอร์วิสไฟล์ Systemd ควรจะดูง่ายกว่าสคริปต์ init.d คุณไม่ได้กล่าวถึงคุณลักษณะเฉพาะที่คุณต้องการซึ่งไม่ได้รับการสนับสนุนโดยบริการ systemd

หากไม่รวมไฟล์บริการsystemdจะใช้สคริปต์ init.d อย่างมีความสุข ดังนั้นผู้พัฒนาแพ็คเกจ mongod กำลังบอกคุณว่าพวกเขาคิดว่านิยาม systemd นี้ดีกว่า :)

systemctl status mongodมองไปที่การส่งออกของ หากเปิดใช้งานบริการเมื่อเริ่มต้นระบบLoaded:บรรทัดจะแสดง "เปิดใช้งาน" systemctl enable mongodมิฉะนั้นที่คุณสามารถใช้ นอกจากนี้คุณยังสามารถรวมตัวเลือก--nowและมันจะเริ่มต้น mongod ในเวลาเดียวกัน


ขอขอบคุณ! ฉันจะศึกษา systemd และใช้มันในที่สุด ตอนนี้ฉันต้องการปิดการใช้งานและในที่สุดก็เรียกใช้สคริปต์ init.d ที่ฉันได้ทำงาน ฉันไป: systemctl disable mongod; จากนั้นเปลี่ยนชื่อ mongod.service เป็น mongod-backup.service systemctl daemon-reloadแล้วก็ คุณคิดว่าสิ่งนี้ถูกต้องหรือไม่? ฉันอ่านแล้วคุณไม่ควรแก้ไขไฟล์ใน / lib / systemd / system / แต่โดยไม่ต้องเปลี่ยนชื่อ systemctl จะไม่สนใจสคริปต์ init.d
นาตาริโอ

ไฟล์ใน / lib / systemd ไม่ได้เป็น conffiles ฉันไม่สามารถแนะนำให้ติดตั้งแพคเกจเดเบียนและแก้ไขไฟล์ของมัน (และปรับปรุงแพ็คเกจภายหลัง) คุณควรเปลี่ยนชื่อสคริปต์ init.d ที่คุณ "ทำงาน" แทน (น่าจะเป็นการปรับเปลี่ยนได้หรือไม่) สคริปต์ init.d มีแนวโน้มที่จะ conffiles หากการอัปเดตเปลี่ยนการประชุม (ซึ่งไม่มีเหตุผลใด ๆ ) การอัปเดตจะเตือนคุณก่อน ในกรณีนี้ฉันคาดว่าจะแจ้งให้คุณทราบหากมีสคริปต์เดิมที่ลบแล้ว (อย่างมีประสิทธิภาพ) สคริปต์ init.d ที่ถูกลบออกไป
sourcejedi

mongodมันเป็นไปได้ที่คุณจะต้องเพิ่มการอ้างอิงการสั่งซื้อเกี่ยวกับบริการใหม่ของคุณกับบริการซึ่งขึ้นอยู่กับ นอกจากนี้ยังมีโอกาสที่คุณจะต้องลบการอ้างอิงที่เข้มงวดบางอย่าง แต่ฉันจะไม่คิดอย่างนั้น วิธีที่ปลอดภัยในการปรับเปลี่ยนบริการที่ได้รับผลกระทบคือการคัดลอกไปยัง/etc/systemd/system/และแก้ไขสำเนา
sourcejedi

โดยทั่วไปแล้วฉันคิดว่าการติดกับ systemd นั้นง่ายกว่า ตอนนี้คุณกำลังศึกษาทุบตี init ฟังก์ชั่น, และ systemd คุณสมบัติกลับ compat เนื่องจากคุณไม่ได้เรียนรู้ระบบการเริ่มต้น SysV ที่บริสุทธิ์หากคุณเคยใช้ระบบดังกล่าวคุณจะมีความเสี่ยงที่คุณจะได้รับคุณสมบัติที่มาจาก systemd
sourcejedi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.