Di Ubuntu, apakah ada perintah untuk menampilkan daftar SEMUA layanan autostart?

22

Di Ubuntu,

  1. Apakah ada perintah untuk menampilkan daftar semua layanan autostart?
  2. Apakah ada perintah untuk memeriksa apakah suatu layanan di-autostart pada saat boot atau tidak?

Saya melakukan Google dan IRC. Saya tidak dapat menemukan jawabannya. Mungkin tidak ada perintah seperti itu di Ubuntu. Pada awalnya, saya pikir semua layanan autostarted akan berada di bawah /etc/rc2.d/, tetapi saya salah tentang itu. Beberapa yang dikonfigurasi hanya di bawah /etc/init/*.conf. Lalu saya mencoba chkconfigalat (menginstalnya secara manual), itu tidak berfungsi sepanjang waktu. Sebagai contoh, ini memberikan hasil yang salah dari mongodbmana autostarted berasal /etc/init/mongodb.conf.

service --status-alldan initctl listhanya bisa memberi tahu status layanan saat ini alih-alih status autostart. update-rc.dadalah perintah untuk mengubah status autostart alih-alih menunjukkan status.

Jika tidak ada jawaban untuk pertanyaan saya, saya hanya ingin tahu mengapa begitu sulit untuk memeriksa layanan autostart di Ubuntu.

SSS
sumber
Saya pikir chkconfig --listakan bekerja dengan benar? onberarti bahwa layanan sedang berjalan di runlevel itu, dan layanan itu akan secara otomatis mulai ketika sistem boot.
maks
1
Seperti yang saya posting di pertanyaan saya, chkconfig tidak selalu berfungsi. misalnya, itu akan memberikan hasil yang salah untuk mongodb. Saya pikir itu mungkin karena mongodb menggunakan /etc/init/mongodb.conf untuk melakukan autostart.
SSS
Bagaimana dengan ls /etc/rc?.d?
toxaq

Jawaban:

11

Ubuntu menggunakan Upstartbukan initsistem tradisional . Pemula lebih kuat daripada init, tetapi sedikit lebih rumit daripada init.

Pemula, sebaliknya, berbasis acara. "Peristiwa" dapat berupa sesuatu seperti "booting" ... atau bisa lebih spesifik, seperti "jaringan siap digunakan sekarang". Anda dapat menentukan skrip mana yang bergantung pada acara mana. Apa pun yang tidak menunggu suatu acara dapat berjalan setiap kali ada CPU yang tersedia.

Sistem berbasis peristiwa ini memiliki keuntungan lain: Anda secara teoritis dapat menggunakannya bahkan setelah sistem aktif dan berjalan. Pemula akhirnya dijadwalkan untuk mengambil alih tugas-tugas seperti atau memasukkan perangkat eksternal seperti thumb drive (saat ini ditangani oleh udev dan hal), atau menjalankan program pada waktu tertentu (saat ini ditangani oleh cron).

Seperti yang harus Anda ketahui sekarang, daemon mati (yang tidak berjalan saat startup) mungkin hidup dan dimulai karena suatu peristiwa.

Ubuntu memiliki / etc / init, untuk Upstart, dan /etc/init.d, untuk file SysV lama. Beberapa file di dalamnya adalah skrip SysV Init biasa yang belum dimigrasi. Tetapi beberapa layanan yang telah bermigrasi memelihara tautan dari /etc/init.d ke / lib / init / upstart-job. Jika Anda menjalankan salah satu dari itu, itu berhasil, tetapi mencetak peringatan terlebih dahulu:

Daripada menggunakan skrip init melalui /etc/init.d, gunakan utilitas layanan (8), mis service mysql restart

Karena skrip yang Anda coba panggil telah dikonversi ke pekerjaan pemula, Anda juga dapat menggunakan utilitas restart (8), misalnya restart mysql.

Pada mesin pemula, init berasal dari pemula. Alih-alih menjalankan skrip rc master yang memanggil skrip untuk runlevel tertentu, init Upstart mengambil pekerjaan dari direktori pekerjaannya.

Sekarang kita tahu tidak ada cara sederhana untuk membuat daftar daemon autostart, Anda harus membuat daftar semua daemon dan memeriksanya satu per satu. Daemon dapat dimulai oleh initatau oleh upstartatau bahkan oleh acara selanjutnya. Cara paling sederhana untuk mendapatkan daftar ini adalah menjalankan perintah ini di shell:

initctl show-config

Outputnya terlihat seperti ini:

...
hostname
  start on startup
udevtrigger
  start on ((startup and started udev) and not-container)
tty2
  start on (runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))
...

Beberapa item seperti yang pertama sangat sederhana, hostnamedimulai saat startup. Tapi barang-barang lain mungkin terlihat lebih rumit. (Tapi untungnya bisa dibaca manusia :-))

Ehsan
sumber
Saya tahu sebagian besar dari apa yang Anda posting. Meskipun ada sesuatu yang baru yang saya tidak tahu, mereka masih tidak dapat menyelesaikan masalah saya. Saya hanya ingin tahu apakah ada perintah yang dapat melakukan pekerjaan dengan mudah (untuk layanan pemula dan init). Sepertinya ubuntu TIDAK memilikinya. Sayang sekali! omong-omong, "initctl" hanya dapat menangani layanan pemula, daripada sistem init tradisional. Jika tidak ada cara yang mudah, maka saya harus menggunakan cara yang sulit ... terima kasih.
SSS
Saya perhatikan, walau tidak salah , versi modern ubuntu telah pindah ke systemd. Yang mengherankan sebagian besar jawaban ini masih berlaku
Journeyman Geek
versi baru Ubuntu tidak menggunakan pemula tetapi systemd unix.stackexchange.com/a/287282/147671
João Pimentel Ferreira
5

Sebenarnya, semua layanan hanya hadir di /etc/init.d:

rc0.d contains the services which runs in runlevel 0
rc1.d contains the services which runs in runlevel 1
rc2.d contains the services which runs in runlevel 2
rc3.d contains the services which runs in runlevel 3
rc4.d contains the services which runs in runlevel 4
rc5.d contains the services which runs in runlevel 5
rc6.d contains the services which runs in runlevel 6

Satu hal lagi, semua layanan hadir di bawah rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.djuga, tetapi itu adalah tautan simbolis ke /etc/init.dsaja.

Lihat di sini ini isi rc1.ddirektori:

lrwxrwxrwx 1 root root  20 Aug 17 14:54 K15pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  22 Nov 28 18:47 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  20 Aug 17 14:54 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  23 Nov  7 15:24 K20openbsd-inetd -> ../init.d/openbsd-inetd
lrwxrwxrwx 1 root root  15 Aug 17 14:54 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root  27 Aug 17 14:54 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Apr 14  2012 README
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S70dns-clean -> ../init.d/dns-clean

Di sini Anda dapat mengamati tautan simbolis ke init.d (K15pulseaudio -> ../init.d/pulseaudio).

Tetapi di sini setiap layanan terhubung dengan init.d, bukan? Tetapi setiap layanan tidak akan dimulai; alasannya adalah dua skrip.

Yang pertama adalah skrip S (S30killprocs) ---> start

Yang kedua adalah skrip k (K15pulseaudio) ---> kill

Semua layanan skrip K mematikan layanan dan semua layanan skrip S memulai layanan untuk runlevel itu.

Secara singkat

S70dns-clean -> ../init.d/dns-cleanmemulai dns-cleanlayanan di runlevel 1.

K15pulseaudio -> ../init.d/pulseaudiomembunuh pulseaudiolayanan di runlevel 1.

maks
sumber
Tidak berlaku untuk layanan pemula, yang mungkin tidak muncul di sini sama sekali.
Wildcard
2

Anda dapat menginstal sysv-rc-conf yang merupakan program ncurses untuk mengkonfigurasi / menampilkan level rc secara grafis.

dseira
sumber
0

Apakah ada perintah untuk menampilkan daftar semua layanan autostart?

Lihat di sini: update-rc-d-cheat-sheet

Apakah ada perintah untuk memeriksa apakah suatu layanan di-autostart pada saat boot atau tidak?

Tidak ada, saya tahu (yang tidak berarti apa-apa;), tetapi Anda dapat mulai membaca di sini: forum askubuntu - ketergantungan layanan

StefanKaerst
sumber