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 status
argumen " ". 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-all
tidak 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 list
tidak banyak membantu. Itu tidak benar-benar mempertimbangkan layanan yang dimulai oleh /etc/init.d
skrip (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 -x
dari 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".
sumber
initctl list
yang mencantumkan proses yang mulai / berjalan, tetapi daftar itu juga akan mencakup proses yang dimulai secara manualinitctl 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.Jawaban:
Semua layanan dimulai saat startup:
Daftar semua layanan yang ada dalam sistem:
sumber
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 mengatakanrunlevel
dan membersihkan output grep dengan awk untuk mencocokkan hanya denganstart on
dan 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.d
mana (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/*.override
file, 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
initctl
atauservices
perintah.sumber
.override
file.Daftar semua layanan dan status runlevel masing-masing - gaya chkconfig:
Suntingan berbasis teks interaktif dari semua yang terdaftar:
Mungkin harus menginstalnya jika tidak ada:
sumber