การเขียนไฟล์เซอร์วิสพื้นฐาน systemd


103

ฉันกำลังพัฒนาแอปพลิเคชั่น Nodejs ที่ผู้ใช้โต้ตอบผ่าน HTTP บนโลคอลโฮสต์ ในทางปฏิบัติไม่มีพารามิเตอร์ใด ๆ และ daemon แทบไม่มีการพึ่งพาและมันก็แค่ต้องการที่จะขึ้นตามเวลาเข้าสู่ระบบ

ฉันต้องการติดตามสำนวนในแต่ละแพลตฟอร์มสำหรับสคริปต์เริ่มต้นและนั่นหมายถึงการพุ่งพรวดบน Ubuntu และ systemd บน Fedora

  • มีแบบฝึกหัดที่ดีสำหรับการเขียนไฟล์ระบบ systemd หรือไม่?
  • มี 'แนวปฏิบัติที่ดีที่สุด' ที่ต้องระวังหรือไม่?

ฉันได้พบทรัพยากรเหล่านี้:

ฉันส่วนใหญ่กำลังมองหา API ที่แปลกประหลาดเป็นข้อมูลอ้างอิงรวมถึงรูปแบบพื้นฐานที่ต้องติดตาม


หน้าArch Linux Wiki เกี่ยวกับ systemdมีส่วนที่น่าสนใจเกี่ยวกับการเขียนไฟล์บริการ
Rudy Matela

> man systemd.service>> man systemd.unit
truezion

คำตอบ:


29

ฉันจะเริ่มต้นด้วยหน้าคู่มือ Systemd พวกเขาแสดงถึงทรัพยากรที่ครอบคลุมของระบบและบริการ

นอกจากนี้ยังมีfreedesktop Systemd คำถามที่พบบ่อย


43
หน้าคนจะมีประโยชน์ (ฉันหวังว่ามันจะสะอาดกว่า) แต่มีระบบการสอนไฟล์พื้นฐานหรือไม่? เช่นเดียวกับส่วนใดที่จำเป็นแนะนำให้ใช้ส่วนใดและส่วนใดเป็นตัวเลือก หน้าคนดูเหมือนจะคิดว่าฉันเป็นผู้เชี่ยวชาญในไฟล์ systemd ระบบซึ่งฉันไม่ได้
beatgammit

ไม่ว่าฉันรู้ แต่น่าเสียดาย อาจมีข้อสันนิษฐานว่าถ้าคุณเขียน initscripts คุณก็รู้วิธีเขียน initscript อยู่แล้ว ดูสคริปต์ Arch และเลือกสิ่งที่คล้ายกับที่คุณต้องการ: archlinux.org/packages/community/i686/systemd
jasonwryan

1
ขอบคุณ! ด้วยความช่วยเหลือของคุณและบล็อกที่ฉันพบฉันสามารถใช้งานขั้นพื้นฐานได้ ดูเหมือนว่าดีกว่า Systemst ดีกว่ามากหรือ systemd init daemon เก่า
beatgammit

49
ใครมีเวลาในชีวิตที่จะเริ่มต้นด้วยสิ่งนั้น ฉันหมายความว่าถ้าคุณรู้ว่าสิ่งที่คุณกำลังทำอยู่นั่นคือการอ้างอิงที่ดี แต่วัวศักดิ์สิทธิ์หน้าคู่มือมีความซับซ้อน
Jonathan Komar

1
@ macmadness86 OP กำลังมองหาแหล่งข้อมูลที่เชื่อถือได้ (ดูย่อหน้าสุดท้าย); สำหรับความต้องการส่วนใหญ่การอ่านไฟล์บริการสำหรับแอพที่คล้ายกันจากนั้นให้คำปรึกษาเฉพาะส่วนของmanหน้าจะมีมากเกินพอที่จะพาคุณไปที่นั่น พวกเขาค่อนข้างตรงไปตรงมา
jasonwryan

180

ตัวอย่างต่อไปนี้ได้รับแรงบันดาลใจจากลิงค์นี้ซึ่งจริงๆแล้วไม่ได้กล่าวถึงทุกขั้นตอนและมีการระบุไว้เพียงเพื่อให้เครดิตแหล่งที่มา: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

ขั้นตอนที่ 1 : ฉันสร้างไฟล์นี้ (ที่ตั้งโน้ต) ซึ่งเป็นขั้นตอนสำคัญในการทุบตีกระบวนการทุบตีด้วยอาร์กิวเมนต์ที่เพิ่มขึ้น คุณสามารถยิงคำสั่งของคุณเองซึ่งอาจแตกต่างจากทุบตี

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

ขั้นตอนที่ 2 :

โหลดซ้ำsystemd:

systemctl daemon-reload

เริ่มบริการใหม่:

systemctl enable foo

(ในทำนองเดียวกันคุณสามารถdisable)

(ไม่บังคับ) ขั้นตอนที่ 3 : ควรเริ่มต้นโดยอัตโนมัติเมื่อรีบูตครั้งถัดไปในโหมดผู้ใช้หลายคน (เรียกใช้ระดับ 3) แต่หากคุณต้องการเริ่มทันที:

systemctl start foo
systemctl status foo # optional, just to verify

อัปเดต:เพื่อความสมบูรณ์ฉันควรเพิ่ม ubuntu bionic ที่ดูเหมือนว่าจะมีหน้าคนที่ละเอียดมาก RTFM ที่นี่


57
ขอบคุณสำหรับการโพสต์บทช่วยสอนด่วนและไม่เพียง แต่ลิงก์ไปยังหน้าคนภายนอก!
Toby J

2
systemctl มีทางลัดคำสั่ง cat สำหรับการอ้างอิง
Andy Bettisworth

ทางลัดคำสั่ง cat คืออะไร? ชอบวิธีสร้างและแก้ไขไฟล์ควบคุม systemd โดยไม่ต้องใส่พา ธ ทั้งหมดหรือไม่?
JpaytonWPD

ไฟล์นี้ควรมีสิทธิอะไรบ้าง
knocte

2
ตามหน้าคน systemd.unit /etc/systemd/systemคุณควรใส่ไว้ใน / usr / lib / systemd เป็นที่ที่แพคเกจการแจกจ่ายที่เหมาะสมใส่ไฟล์ไว้
wbkang

4

2
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรจะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Stephen Rauch

1
@StephenRauch ฉันรู้ว่าการเชื่อมโยงธรรมดาไม่ได้รับการต้อนรับมาก แต่นี่เป็นหัวข้อใหญ่และไม่ง่ายที่จะสรุปคำตอบ
caracal

นี่เป็นคำแนะนำที่อ่านได้มากที่สุดที่ฉันพบ นี่เป็นคำตอบที่ดี :-)
ปฏิบัติต่อ mods ของคุณดี

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