Daftar semua layanan mulai saat boot

15

Saya mencari cara untuk mendapatkan daftar semua layanan (/etc/init.d atau pemula atau systemd), yang seharusnya mulai (atau sudah mulai) boot.

Bagaimana Anda mendapatkan daftar semua layanan awal? - Saya tahu pertanyaan itu, dan itu menyarankan untuk digunakan service --status-all.

Tapi itu tidak menunjukkan kepada saya, layanan mana yang SEHARUSNYA MENJALANKAN . Ia memanggil semua skrip init dengan statusargumen " ". Ini adalah daftar semua layanan yang dapat berjalan.

Tapi saya ingin tahu, jika sebuah layanan, yang sudah dimulai saat boot masih berjalan.

Contoh…

Saya sudah menginstal webfs. Tapi saya tidak ingin itu berjalan saat boot. Jadi saya dinonaktifkan: sudo update-rc.d webfs disable. Dan saya juga telah menginstal samba dan itu harus dijalankan saat boot. Tetapi dihentikan (untuk alasan apa pun). sudo service --status-alltidak membantu saya di sini:

$ sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
 [ - ]  samba
 [ - ]  webfs

Keduanya mati tetapi saya tidak tahu, bahwa samba itu seharusnya ada.

Begitu…

Bagaimana saya bisa mendapatkan daftar semua layanan yang mulai saat boot? Dan, sebagai ekstensi, apakah ada cara mudah untuk mendapatkan "status" dari layanan ini (jika tidak, saya hanya akan mengulang daftar ini dan menjalankan "layanan layanan $ status", atau sesuatu seperti ini).

Terima kasih, Alexander

Sunting 2015-05-04: Saya di Ubuntu 14.04.

Fokus utama dari pertanyaan ini adalah sebagai berikut:

Tapi saya ingin tahu, jika sebuah layanan, yang sudah dimulai saat boot masih berjalan.

Karena itu, initctl listtidak banyak membantu. Itu tidak benar-benar mempertimbangkan layanan yang dimulai oleh /etc/init.dskrip (dibandingkan dengan skrip pemula di /etc/init).

Juga daftar /etc/rc?.d/S*tidak membantu. Ini akan menghasilkan daftar layanan, yang mungkin sudah dimulai di runlevel yang diberikan. Itu tidak menunjukkan kepada saya, jika suatu layanan, yang seharusnya sudah dimulai, masih berjalan.

Pada dasarnya, saya mencari sesuatu seperti svcs -xdari Solaris untuk Ubuntu. Dengan svcs -x, saya akan memiliki output jika layanan, yang dimulai, tidak berjalan lagi. Ini, saya perlu untuk Ubuntu juga.

Alasan: Saya ingin memiliki (atau kurang ...) cek generik untuk sistem pemantauan Icinga / Nagios kami, yang akan mengingatkan saya, jika suatu layanan tidak berjalan lagi, yang seharusnya berjalan. Karena kami memiliki banyak server yang berbeda untuk banyak pelanggan yang berbeda, itu tidak benar-benar skala untuk menentukan daftar layanan "penting".

Alexander Skwar
sumber
Versi Ubuntu yang mana?
AB
mungkin duplikat layanan Command to list yang dimulai saat startup?
Parto
@Parto Jawaban yang diterima dalam pertanyaan itu adalah initctl listyang mencantumkan proses yang mulai / berjalan, tetapi daftar itu juga akan mencakup proses yang dimulai secara manual
Sergiy Kolodyazhnyy
@ AB Saya di Ubuntu 14.04.
Alexander Skwar
@Parto askubuntu.com/questions/218/… tidak memberikan jawaban. Seperti yang ditulis @Serg, jawabannya ada di sana untuk digunakan initctl list. Tapi itu tidak benar-benar menjawabnya, karena itu juga akan menampilkan layanan yang dimulai secara manual. Dan itu tidak menunjukkan layanan, yang tidak berjalan.
Alexander Skwar

Jawaban:

19

Semua layanan dimulai saat startup:

initctl list

Daftar semua layanan yang ada dalam sistem:

service --status-all
kaxi1993
sumber
Salah. Tidak menyediakan daftar layanan yang diaktifkan (dimulai saat startup). Mereka menunjukkan semua layanan yang dikenal (beberapa di antaranya mungkin dinonaktifkan) dan apakah mereka sedang berjalan atau tidak (yang tidak berarti mereka mulai secara otomatis).
Reinier Post
2

Ini salah satu saya grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

Output yang sedikit lebih bersih dapat dicapai dengan grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

Sekarang mari masuk ke detail. Semua pekerjaan pemula semuanya tersimpan /etc/init/, bukan? Pekerjaan di sana semua memiliki garis yang menyatakan di mana runlevel mereka mulai. Runlevel 2 adalah boot normal, runlevel default. Jadi, jika kita menangkap semua baris yang mengatakan runleveldan membersihkan output grep dengan awk untuk mencocokkan hanya dengan start ondan runlevel # 2, kita mendapatkan daftar pekerjaan pemula. Sisanya hanya untuk memformat kebutuhan, mengganti / dalam nama file ke ruang, dan memotong jalan ke file-file itu, meninggalkan nama file sendiri.

Bagian !/#/ini untuk mengatasi mungkin berkomentar mulai arahan, yang saya pribadi tambahkan secara manual.

Antara lain, ada di /etc/rc2.dmana (jika saya mengerti dengan benar) Anda memiliki skrip prioritas yang lebih rendah.

Crude one-liner untuk itu adalah: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Script yang ada di folder itu yang benar-benar berjalan di runlevel 2 dinamai dimulai dengan S dan diikuti oleh nomor prioritas. Sekarang, pada dasarnya, kita mendapatkan semua file dimulai dengan S, dan hanya daftar dengan hanya nama prioritas (masih harus mencari cara untuk membersihkannya).

Seperti yang ditunjukkan muru dengan benar di komentar, ada juga /etc/init/*.overridefile, yang dapat "... .modify bagaimana suatu pekerjaan akan berjalan tanpa harus memodifikasi file konfigurasinya secara langsung" ( init manual )

Saat ini, karena saya tidak punya banyak pengalaman dengan file-file ini, saya hanya dapat menyarankan melihat melalui file-file .override dengan menggunakan 'grep' manual '/etc/init/*.override' untuk mendaftar layanan yang diminta untuk memulai secara manual dengan initctlatau servicesperintah.

Sergiy Kolodyazhnyy
sumber
Perhatikan bahwa karena ketergantungan acara, tidak dapat dengan mudah ditentukan jika layanan yang diberikan akan mengakibatkan layanan lain dimulai. Ada juga masalah kecil .overridefile.
muru
@Serg, terima kasih. Tapi itu hanya berkaitan dengan hal-hal baru. Juga "ls /etc/rc2.d/* ..." tidak banyak membantu. Akan ditampilkan, layanan mana yang mungkin telah dimulai. Tapi itu tidak menunjukkan, layanan mana yang masih berjalan. Saya kira, poin utama dari posting saya tidak jelas. Saya mencari: Tapi saya ingin tahu, jika suatu layanan, yang sudah dimulai saat boot masih berjalan. Tidak tahu apakah Anda kenal Solaris. Di sana, saya cukup melakukan "svcs -x", dan jika itu mengembalikan sesuatu, saya tahu ada sesuatu yang tidak berjalan. Saya perlu sesuatu seperti ini untuk Ubuntu.
Alexander Skwar
Yah orang bisa menulis fungsi skrip atau bashrc untuk membandingkan output dari satu liner saya di sana dan dari daftar initctl. Ingin saya memposting itu?
Sergiy Kolodyazhnyy
@ Baik energi - jika Anda menawarkan;)
Alexander Skwar
2

Daftar semua layanan dan status runlevel masing-masing - gaya chkconfig:

# sysv-rc-conf --list

acpid        2:on       3:on    4:on    5:on
apache-htcac 0:off      1:off   2:off   3:off   4:off   5:off   6:off
apache2      0:off      1:off   2:on    3:on    4:on    5:on    6:off

Suntingan berbasis teks interaktif dari semua yang terdaftar:

# sysv-rc-conf

l SysV Runlevel Config   -: stop service  =/+: start service  h: help  q: quit qk
x 
x service      1       2       3       4       5       0       6       S 
x ----------------------------------------------------------------------------
x acpid       [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x apache-ht$  [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]
x apache2     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x
x Use the arrow keys or mouse to move around.      ^n: next pg     ^p: prev pg
x                        space: toggle service on / off

Mungkin harus menginstalnya jika tidak ada:

apt install sysv-rc-conf
Bzean
sumber