สั่งรายการบริการที่เริ่มต้นเมื่อเริ่มต้นอย่างไร


144

มีคำสั่งให้แสดงรายการบริการที่ทำงานเมื่อเริ่มต้นหรือไม่ ฉันคิดว่ามันจะเกี่ยวข้องกับการแยกวิเคราะห์/etc/init.d/และ/etc/rc.*ไดเรกทอรีต่างๆ

คำตอบ:


104

คุณสามารถใช้initctl listคำสั่งเชลล์เพื่อแสดงเนื้อหาของคำสั่งที่/etc/initแนะนำdbus-send


1
ใช้งานได้กับ Ubuntu 18.04 หรือไม่ ฉันได้รับ "initctl: ไม่พบคำสั่ง" (ในทุบตี)
Sanjay Manohar

121

คำตอบอย่างรวดเร็วคือ: ขึ้นอยู่กับinitระบบของคุณ

คำตอบยาว ๆ คือ: สำหรับ Ubuntu ปัจจุบันคุณอาจมีUpstartและSystemV ผสมกัน รุ่นใหม่ของ Ubuntu 15.04 หลังจาก "Vervet สดใส" (และลินุกซ์ distros อื่น ๆ เช่น RHEL / CentOS 7) กำลังจะย้ายไปใช้SystemD

พุ่งพรวด

ในการแสดงรายการบริการทั้งหมด:

initctl list

หากต้องการแสดงรายการบริการพุ่งพรวดทั้งหมดและเปิดใช้งานinitctl show-configพวกเขาหนึ่งซับนี้อาจมีประโยชน์:

initctl list | awk '{ print $1 }' | xargs -n1 initctl show-config

ระบบ V

ในการแสดงรายการบริการทั้งหมด:

service --status-all

หรือ:

# for init scripts:
ls /etc/init.d/

# for runlevel symlinks:
ls /etc/rc*.d/

SystemD

ในการแสดงรายการบริการทั้งหมด:

systemctl list-unit-files --type=service

หรือ:

ls /lib/systemd/system/*.service /etc/systemd/system/*.service

9
นี่ควรเป็นคำตอบที่ยอมรับได้
sjas

service --status-allไม่แสดงว่ามีการเปิดใช้งานบริการเพื่อเริ่มการบู๊ตอย่างน้อยไม่ได้อยู่ใน Ubuntu 16 มันแสดงให้เห็นว่าบริการกำลังทำงานอยู่หรือไม่
Wildcard

1
ฉันต้องsudo service --status-allได้รับบริการทั้งหมดเพื่อแสดง มีบางส่วนที่ถูกซ่อนไว้เมื่อฉันรันเฉพาะservice --status-allบัญชีที่ไม่ใช่รูท
Phlucious

@Pulucious: ขอบคุณสำหรับการกล่าวถึงว่า ผมถือว่ามันเป็นที่รู้จักกันดีว่าคำสั่งเหล่านี้มักจะมีการทำงานเป็นราก ( systemctl, service, initctl... ) ที่พวกเขาได้รับการพิจารณาโดยปกติคำสั่งการบริหารระบบ
TrinitronX

13

/etc/init.dและ/etc/rc.*ไดเรกทอรีได้รับการแทนที่โดย ' upstart' เครื่องมือ init แม้ว่าสคริปต์ในไดเรกทอรีเหล่านี้จะถูกดำเนินการตามที่คาดไว้วิธีการใหม่สำหรับการเรียกใช้สิ่งต่าง ๆ บน init ถูกกำหนดโดยไฟล์ใน/etc/init/

คุณสามารถแสดงรายการงานพุ่งพรวดทั้งหมดด้วยการสอบถามพุ่งพรวดผ่าน dbus:

dbus-send --print-reply --system --dest=com.ubuntu.Upstart \
        /com/ubuntu/Upstart com.ubuntu.Upstart0_6.GetAllJobs

คุณอาจต้องเปลี่ยน0_6เพื่อให้สอดคล้องกับรุ่นของการพุ่งพรวดที่คุณมี คำสั่งนี้ทำงานกับการติดตั้งชัดเจนของฉัน


3
@Eric H: คุณสามารถตั้งคำตอบด้านล่างว่าถูกต้องแทน - initctl listดีกว่าคำสั่ง dbus นี้มาก ฉันต้องการออกจากคำตอบนี้ที่นี่เพื่ออ้างอิง (แทนที่จะลบทิ้งทั้งหมด) แม้ว่า
Jeremy Kerr

12

หากคุณต้องการการแสดงกราฟิกที่ดีของบริการและเวลาที่ใช้ในการบูตลอง:

apt-get install bootchart

11

ID ใช้initctl show-config <servicename>เพื่อรับรายละเอียดว่าเมื่อใด / หากบริการของคุณจะเริ่มระหว่างการบู๊ต

ชอบมาก

$ initctl show-config myservice
myservice
  start on runlevel [2345]
  stop on runlevel [!2345]

หรือสำหรับ NFS4 idmap-daemon:

$ initctl show-config idmapd
idmapd
  start on (local-filesystems or mounting TYPE=nfs4)
  stop on runlevel [06]

chkconfig สามารถใช้ได้กับระบบที่ใช้ RedHat เท่านั้น


1
นี่คือคำตอบที่ถูกต้อง ฉันไม่รู้ว่าทำไมคำตอบที่ไม่ถูกต้องและไม่สมบูรณ์จึงได้รับการยกระดับขึ้นอย่างมาก
Cerin

1
สิ่งนี้ใช้ได้ผลกับผู้ที่ใช้ SysV ฉันเห็นด้วยว่านี่เป็นคำตอบที่ดี แต่ไม่สมบูรณ์
Gabriel Netto

9

ในวันที่ 12.04 เราสามารถใช้:

sudo apt-get install chkconfig
chkconfig --list

แต่มันก็ถูกถอดออกใน 12.10

ตัวอย่างผลลัพธ์:

acpi-support              0:off  1:off  2:on   3:on   4:on   5:on   6:off
acpid                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
apparmor                  0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on

2
ไม่ทำงานใน Ubuntu packages.ubuntu.com/…
AB

@AB ขอบคุณที่แจ้งให้เราทราบ! ทุกวันนี้มันเป็นเรื่องยากที่นักแสดงความเห็นจะต้องใช้ความกล้าหาญและทำให้ฉันเรียนรู้ได้ อัปเดตด้วยเวอร์ชันที่ใช้งานได้
Ciro Santilli 新疆改造中心法轮功六四事件



0

นอกจากบริการระบบและสคริปต์ภายใต้:

/etc/init.d/
/ lib / systemd / system /
/ etc / systemd / system /

อาจมีแอปพลิเคชัน AutoStartด้วยเช่น:

find / -name "*autostart*"

ls -1 "/etc/xdg/autostart" "/home/$USER/.config/autostart" "/usr/share/gdm/autostart"  "/usr/share/gnome/autostart"

-2

ใช้เพ่งพิศ:

ls -l /etc/rc*.d/* | gawk 'match($0, /rc([0-6S]).d.*\/(.*)$/, a) {l[a[2]]=l[a[2]]a[1]","}; END{for(v in l){print v,substr(l[v],1,length(l[v])-1)}}'

ตัวอย่างผลลัพธ์:

$ ls -l /etc/rc*.d/* | gawk 'match($0, /rc([0-6S]).d.*\/(.*)$/, a) {l[a[2]]=l[a[2]]a[1]","}; END{for(v in l){print v,substr(l[v],1,length(l[v])-1)}}' | egrep README
README 0,1,2,3,4,5,6,S
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.