มีวิธี "มาตรฐาน" ที่จะทำให้ดีมอนในเดเบียน?


17

ฉันต้องสร้างดีมอนจากแอปพลิเคชั่นใน Debian มีเครื่องมือมาตรฐานสำหรับสิ่งนี้ใน Debian เช่น "upstart" ใน Ubuntu หรือไม่? ฉันต้องการเพียงคำสั่ง start-stop เพื่อเริ่มโปรแกรมเป็น daemon ที่มีตัวเลือกบางตัวและไฟล์ pid และฆ่ามันด้วยไฟล์ pid

ฉันดูที่ init.d แต่ดูเหมือนว่านี่สำหรับการเปิดตัวในช่วงเปิดเครื่อง ฉันต้องการเริ่มภูตของฉันด้วยตนเอง


2
โปรดทราบว่าสิ่งนี้ได้เปลี่ยนไปสำหรับ debian jessie ซึ่งเปลี่ยนค่าเริ่มต้นจาก sysvinit เป็น systemd
จูลส์

เดเบียนเจสซีดูเหมือนจะมีรูปแบบของความเข้ากันได้แบบย้อนหลังอย่างน้อยใช้ / usr / bin / service - หากไม่มีการตั้งค่าแบบพุ่งพรวด (/etc/init/th/servservice d / {service}) จากนั้น / usr / bin / service จะโต้ตอบกับ /etc/init.d/{service} เหมือนเดิมภายใต้ sysvinit
Kevin

คำตอบ:


18

คุณสามารถสร้างภูตของคุณเองตาม/etc/init.d/skeletonไฟล์ใน Debian

คุณสามารถใช้/usr/bin/serviceเพื่อเปิด$ sudo service yourdaemon startและหยุด$ sudo service yourdaemon stopภูตของคุณ

ตราบใดที่คุณไม่เชื่อมโยงสคริปต์ของคุณไปยัง/etc/rc?.dไดเรกทอรีใด ๆมันจะไม่เริ่มต้นเมื่อเริ่มต้น

ในทางกลับกันคุณอาจต้องการดูdaemontoolsซึ่งไม่ได้เป็นมาตรฐานของเดเบียน แต่มีคุณสมบัติที่น่าสนใจ


ขอบคุณ ดูเหมือนว่าผมไม่ได้มี/usr/bin/serviceในระบบของฉัน (มันเดเลนนี่) /etc/init.d/myservice startแต่ฉันสามารถเริ่มต้นสคริปต์โดยตรงกับ
Kuroki Kaze

3
คุณสามารถใช้sudo invoke-rc.d yourservice startเป็นอย่างดี
chmeee

ไม่ทราบว่า ขอบคุณ
chiggsy

3

Debian (และ Ubuntu) มีโปรแกรมตัวช่วยstart-stop-daemonซึ่งใช้ในสคริปต์ init มีตัวเลือกค่อนข้างน้อยในการเริ่มต้นและติดตามภูต คุณสามารถเขียน wrapper รอบ ๆ เช่น

case $1 in
start) start-stop-daemon --start --exec /my/exec/prog --pidfile /my/pid/file --background
       ;;
stop)  start-stop-daemon --stop --pidfile /my/pid/file 
       ;;
esac

3
ฉันชอบ /etc/init.d/skeleton ที่แนะนำข้างต้นเพราะมันรวมถึงส่วน INIT INFO ที่ช่วยในการโยกย้ายไปยังการพึ่งพาการบูท
dpavlin

2

เพื่อให้ daemonize กระบวนการสำหรับ Debian อย่างถูกต้องคุณจะต้องทำหลายขั้นตอนรวมถึงการแยกออกจากกระบวนการควบคุมการรีเซ็ต IO และการสร้างไฟล์ id กระบวนการเพื่อให้เล่นได้อย่างดี คุณสามารถใช้โปรแกรม daemon แทนจากแพ็กเกจที่มีชื่อเดียวกันแทนได้ หากนั่นคือสิ่งที่คุณต้องการจะทำคำตอบสามารถพบได้ที่นี่ใน StackOverflow: /programming/3095566/linux-daemonize

คำสั่ง upstart คล้ายกับคำสั่ง invoke-rc.d ของ Debian หรือคำสั่งบริการจากแพ็คเกจ sysvinit-utils พวกเขาคาดหวังว่าจะสามารถทำงานกับสคริปต์เริ่มต้นใน /etc/init.d มันเป็นมาตรฐานของ Debian ที่จะสร้างหนึ่งในแพ็คเกจของคุณและให้ใช้โปรแกรม start-stop-daemon ตามที่คุณเห็นในตัวอย่าง /etc/init.d/skeleton

เพียงเพราะคุณสร้าง /etc/init.d/myservice สคริปต์ไม่ได้หมายความว่ามันจะต้องเริ่มต้นโดยอัตโนมัติ คุณสามารถปรับ runlevels ที่หยุดและเริ่มต้นโดยอัตโนมัติโดยใช้เครื่องมือเช่น update-rc.d นี่คือคำอธิบายรายละเอียดเพิ่มเติมที่ปิดการใช้งานบริการจากการเริ่มต้นที่ runlevels ทั้งหมดหรือไม่

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