การเปิดใช้งานไฟล์หน่วย 'linked' ใน Systemd


10

ฉันยังคงจับกับ systemd และได้ทำงานเป็นบางสิ่งบางอย่าง มันไม่ใช่ปัญหามากนัก แต่ฉันต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการที่เป็นอยู่นี้ ฉันไม่พบการอ้างอิงถึงสิ่งนี้ที่อื่น

/etc/systemd/systemปิดครั้งแรกผมเข้าใจว่าไฟล์หน่วยที่กำหนดเองสำหรับการให้บริการควรจะไปใน อย่างไรก็ตามมันจะเป็นการดีสำหรับการจัดการเซิร์ฟเวอร์ของเราหากไฟล์หน่วยสามารถอยู่ที่อื่น

ในเอกสารฉันเห็นว่าคุณอาจจะ 'ลิงค์' ไฟล์หน่วยเช่น:

systemctl link /path/to/servicename.service

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

อย่างไรก็ตามการพยายามเปิดใช้งานไฟล์หน่วย 'ลิงก์' นั้นส่งผลให้เกิดความล้มเหลว:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

ใช้ไฟล์หน่วยเดียวกันแน่นอน แต่คัดลอกไปที่/etc/systemd/systemแทนที่จะเชื่อมโยงคุณจะได้รับ:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

จากนี้ดูเหมือนว่าเป็นไปไม่ได้ที่จะเปิดใช้งานการเชื่อมโยงในไฟล์ยูนิตเมื่อเริ่มต้นระบบ

หากเป็นกรณีนี้จุดประสงค์ของฟังก์ชั่น 'ลิงก์' คืออะไร? จากเอกสารบอกว่า:

ลิงค์ FILENAME

ลิงก์ไฟล์หน่วยที่ไม่ได้อยู่ในพา ธ การค้นหาไฟล์หน่วยลงในพา ธ การค้นหาไฟล์หน่วย สิ่งนี้ต้องการพา ธ สัมบูรณ์ไปยังไฟล์หน่วย ผลของสิ่งนี้สามารถยกเลิกได้ด้วยการปิดการใช้งาน ผลกระทบของคำสั่งนี้คือไฟล์หน่วยจะพร้อมใช้งานสำหรับคำสั่งเริ่มต้นและคำสั่งอื่น ๆ แม้ว่าจะไม่ได้ติดตั้งโดยตรงในพา ธ การค้นหาหน่วย

คำตอบ:


15

หน้าคนกำลังทำให้เข้าใจผิด

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

ครั้งแรกทำให้คุณเป็นไปsystemctl start myserviceได้ ที่สองทำให้เป็นไปได้สำหรับmyserviceการเริ่มต้นโดยอัตโนมัติ (ซึ่ง @Julien ชี้เพิ่มโดยอัตโนมัติlink)

ฉันคิดว่า ... ฉันพยายามห่อหัวของฉันรอบนี้ทั้งวัน


1
โปรดทราบว่าsystemctl enableจะต้องดำเนินการเช่นsystemctl linkกันดังนั้นจึงไม่จำเป็นต้องพิมพ์คำสั่ง 2 ;-)
Julien

@Julien โอ้ที่เราคุณเมื่อฉันเขียนเมื่อปีที่แล้ว :-) ฉันคิดว่าในที่สุดฉันก็รู้ว่าเมื่อเดือนที่แล้ว!
Auspex

ฉันคิดว่ามีคนน้อยมากที่รู้เรื่องนี้ ขอบคุณมาก!
Kyle

10

เมื่อเปิดใช้งานบริการจากเส้นทางอื่นนอกเหนือจากเส้นทางเริ่มต้นคุณควรใช้เส้นทางแบบเต็ม เปิดใช้งานจะสร้างลิงค์ให้คุณด้วย:

systemctl enable /root/myservice.service

เมื่อเปิดใช้งานคุณสามารถเริ่ม / หยุด / สถานะด้วยชื่อบริการ

systemctl start myservice

คำเตือนบางประการที่นี่:

  • คุณไม่สามารถเปิดใช้งานไฟล์บริการที่มีลิงก์อยู่ในตัวเองแล้ว
  • ตรวจสอบให้แน่ใจว่าเส้นทางนั้นอยู่ในดิสก์ที่เมานต์เดียวกัน หากไม่เป็นเช่นนั้น systemd จะไม่สามารถโหลดไฟล์หน่วยบริการเมื่อบู๊ตได้เนื่องจากดิสก์จะยังไม่ถูกเมาท์และจะไม่พบไฟล์ (ดูที่ไฟล์ยูนิตที่ลิงก์ Systemd บนดิสก์ที่ติดตั้งแล้วไม่สามารถโหลดได้ )
  • เนื่องจากข้อผิดพลาดใน systemd คุณไม่สามารถเปิดใช้งานอินสแตนซ์จากไฟล์หน่วยที่อยู่ในเส้นทางที่ไม่เป็นมาตรฐาน (ดูhttps://github.com/systemd/systemd/issues/661 )
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.