ทางเลือก Chkconfig สำหรับเซิร์ฟเวอร์ Ubuntu?


144

ฉันคุ้นเคยกับการจัดการบริการ startups บนแพลตฟอร์ม Redhat / RHEL โดยใช้วิธีchkconfigที่ไม่เป็นวิธี Debian / Ubuntu - ฉันจะอัพเดตข้อมูลระดับ runlevel สำหรับบริการระบบบน Ubuntu ได้อย่างไร

ในที่สุดมองหาเทียบเท่าของ:

chkconfig --add <service>
chkconfig --level 345 <service> on
chkconfig --del <service>

1
BTW: คุณสามารถapt-get install chkconfigทำแพ็คเกจบน Ubuntu ได้เช่นกัน แต่จะเสียตั้งแต่ปี symlink ต่อไปนี้จะทำให้มัน (ค่อนข้าง) ทำงาน:ln -s /usr/lib/insserv/insserv /sbin/insserv
Eckes

คำตอบ:


125

เทียบเท่ากับchkconfigคือupdate-rc.d

สิ่งที่เทียบเท่าที่คุณต้องการคือ

update-rc.d <service> defaults
update-rc.d <service> start 20 3 4 5
update-rc.d -f <service>  remove

ดูหน้านี้เป็นประโยชน์สำหรับข้อมูลเพิ่มเติมหรือตรวจสอบ man update-rc.d


5
ปรับปรุง rc.d เป็นเพียงหมายที่จะใช้ในสคริปต์บรรจุภัณฑ์ไม่ได้โดยมนุษย์ นอกจากนี้ยังใช้สำหรับสคริปต์เริ่มต้นซึ่ง Ubuntu ไม่ได้ใช้ Ubuntu ใช้ Upstart
maco

11
"โปรดทราบว่าโปรแกรมนี้ออกแบบมาเพื่อใช้ในสคริปต์ผู้ดูแลแพ็คเกจและดังนั้นจึงมีเพียงฟังก์ชันการทำงานที่ จำกัด มากที่สคริปต์ดังกล่าวต้องการผู้ดูแลระบบไม่ได้รับการสนับสนุนให้ใช้ update-rc.d เพื่อจัดการ runlevels พวกเขาควรแก้ไขลิงก์ โดยตรงหรือใช้เครื่องมือแก้ไข runlevel เช่น sysv-rc-conf และ bum แทน " จาก manpage: manpages.ubuntu.com/manpages/hardy/man8/update-rc.d.8.html
maco

4
ฉันยอมรับคำตอบนี้เนื่องจากหน้าคู่มือที่อัปเดตแล้วได้ลบคำเตือนนั้นแล้ว manpages.ubuntu.com/manpages/lucid/man8/update-rc.d.8.html
Marco Ceppi

4
ซึ่งยังไม่เปลี่ยนความจริงที่ว่า Ubuntu ไม่ได้ใช้สคริปต์เริ่มต้น SysV ในปัจจุบันและ update-rc.d สำหรับพวกเขาเท่านั้น
maco

1
ยังคงมีสคริปต์ sysv บางตัวที่ใช้และโดยเฉพาะอย่างยิ่งพวกเขาทำงานกับคนธรรมดาเช่นกัน ดังนั้นหากคุณไม่มีเวลาในการแปลงสคริปต์คุณอาจใช้วิธีนี้ต่อไป
eckes

53

ทางเลือกที่ดีที่สุด IMHO คือ sysv-rc-conf ในการติดตั้งเพียงแค่เรียกใช้คำสั่ง:

sudo apt-get install sysv-rc-conf

เมื่อติดตั้งแล้วให้รันคำสั่ง:

sudo sysv-rc-conf

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

ตัวอย่างเช่นการหยุด ssh ที่ระดับ 3 และ 5 ของการดำเนินการ:

sysv-rc-conf-off level 35 ssh

เริ่มต้นใน runlevels 2,3,4 และ 5:

sysv-rc-conf on atd

หากคุณต้องการทราบข้อมูลเพิ่มเติม:

man sysv-rc-conf

นี่คือสิ่งที่ฉันต้องการยกเว้นว่าฉันทำsysv-rc-conf apache2 on/ sysv-rc-conf apache2 offฯลฯ
Adam K Dean

สิ่งนี้ใช้ได้กับฉันเมื่อเปรียบเทียบ update-rc.d ซึ่งกำลังมองหาสคริปต์ของโปรแกรมในไดเรกทอรี /etc/init.d/ ซึ่งบางโปรแกรมเช่น vsftpd ไม่ได้ติดตั้ง
David Okwii

ทำงานให้ฉันใน Ubuntu 14.04
Hashid Hameed

คุณพิมพ์ผิด: sysv-rc-conf-off level 35 sshควรเป็นsysv-rc-conf --level 35 ssh off
Slam

ผ่านการทดสอบการทำงานบนUbuntu 16.04LTSซึ่งupdate-rc.dไม่ได้ทำ
Sopalajo de Arrierez

10

ตอนนี้ไม่มีอะไรเทียบเท่ากับรีลีสที่เสถียรสำหรับการทำสิ่งต่างๆด้วยสคริปต์ Upstart Jacob Peddicord เขียน jobservice (backend daemon) และ jobs-admin (GTK + GUI ที่พูดถึง) สำหรับโครงการ Google Summer of Code ของเขา แพคเกจสุวิมลมีในสัญญาซื้อขายไฟฟ้าของเขา พวกเขายังมีอยู่ในจักรวาลในไม่ฝักใฝ่ฝ่ายใด ไม่มีส่วนหน้าบรรทัดคำสั่งสำหรับ jobservice เพียงแค่ jobs-admin


10

ลองสิ่งนี้:

apt-get install chkconfig

ใช้งานได้อย่างน้อย Ubuntu 12.04


6
ใช้งานไม่ได้กับ 12.10
ผู้เชี่ยวชาญ

มี 12.04 และ apt-get install chkconfig จะให้: "E: แพ็คเกจ 'chkconfig' ไม่มีตัวเลือกการติดตั้ง" ในไฟล์ /etc/apt/sources.list ของคุณคืออะไร
John Little

ดูเหมือนว่าล่าสุดได้รับการตีพิมพ์แม่นยำ: 12.04: 1.0-79.1-2 http://us.archive.ubuntu.com/ubuntu/ precise/universe i386 Packages0 การแก้ไขบางอย่างไม่เคยทำให้มันกลายเป็นแพคเกจ
eckes

2
ไม่มีแพ็คเกจบน Ubuntu 14.04 เราจำเป็นต้องเพิ่มแหล่งอื่นหรือไม่?
Hashid Hameed

5

ให้เดินจากศูนย์ไปยังเป้าหมาย - ทำอย่างไรกับทีละขั้นตอน

ขั้นตอนที่ 1:ให้เขียนสวัสดีโลก

cat >> /var/tmp/python/server.py <<\EOF
#/usr/bin/python
import time
while True:
  print "hello> YES Bello"
  time.sleep(30)

EOF

ขั้นตอนที่ 2:ทำให้แอปพลิเคชันสวัสดี world server ของเราอัตโนมัติ

cat >> /var/tmp/myserver.sh <<\EOF
#!/bin/sh
script='/var/tmp/python/server.py'
export DISPLAY=:0.0 && /usr/bin/python $script &

EOF
chmod +x /var/tmp/myserver.sh

cat >> /etc/init.d/myserver <<\EOF

#! /bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/var/tmp/myserver.sh
PIDFILE=/var/run/myserver.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in
  start)
     log_daemon_msg "Starting feedparser"
     start_daemon -p $PIDFILE $DAEMON
     log_end_msg $?
   ;;
  stop)
     log_daemon_msg "Stopping feedparser"
     killproc -p $PIDFILE $DAEMON
     PID=`ps x |grep server.py | head -1 | awk '{print $1}'`
     kill -9 $PID       
     log_end_msg $?
   ;;
  force-reload|restart)
     $0 stop
     $0 start
   ;;
  status)
     status_of_proc -p $PIDFILE $DAEMON atd && exit 0 || exit $?
   ;;
 *)
   echo "Usage: /etc/init.d/atd {start|stop|restart|force-reload|status}"
   exit 1
  ;;
esac

exit 0


EOF
chmod +x /etc/init.d/myserver
chmod -R 777 /etc/init.d/myserver

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

$ update-rc.d myserver defaults
update-rc.d: warning: /etc/init.d/myserver missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
 Adding system startup for /etc/init.d/myserver ...
   /etc/rc0.d/K20myserver -> ../init.d/myserver
   /etc/rc1.d/K20myserver -> ../init.d/myserver
   /etc/rc6.d/K20myserver -> ../init.d/myserver
   /etc/rc2.d/S20myserver -> ../init.d/myserver
   /etc/rc3.d/S20myserver -> ../init.d/myserver
   /etc/rc4.d/S20myserver -> ../init.d/myserver
   /etc/rc5.d/S20myserver -> ../init.d/myserver
  • ดังนั้นในขั้นตอนที่ 3 ระบบในการบูตจะรัน server.py โดยอัตโนมัติเป็น daemon และทำให้ง่ายต่อการทำงานอัตโนมัติ

หวังว่ามันจะช่วย


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