Nonaktifkan layanan dari mulai dari semua runlevel?

61

Saya memiliki layanan fooyang saat ini dimulai pada runlevel 3 ke atas. Bagaimana saya bisa menghentikannya, tanpa menggunakan update-rc.d foo stop 3 ., yang (jika saya memahaminya dengan benar) akan mematikan layanan di setiap perubahan runlevel.

(mis., jika saya berada di runlevel 1 dan diaktifkan foo, maka ketika saya berubah menjadi runlevel 3 itu akan dinonaktifkan, bukan?)

Menjalankan Debian GNU / Linux Lenny.

lfaraone
sumber

Jawaban:

57

Istilah "stop" tidak mencegah daemon dari mulai tetapi menutupnya saat memasuki runlevel yang ditentukan.

Jika Anda hanya ingin menghapus layanan / daemon dari satu runlevel, update-rc.dseperti yang ditunjukkan bei freiheit atau cukup hapus symlink dari /etc/rcX.d/, di mana X adalah runlevel Anda. Jika Anda tidak ingin layanan mulai secara otomatis, update-rc.d -f foo removeakan melakukan trik.

PEra
sumber
2
Ada ide bagaimana melakukannya di Debian 8? sudo update-rc.d -f sunrpc removetidak bekerja; masih ada setelah reboot.
Debian 9 Ini tidak bekerja untuk saya, dan kemudian saya menyadari, oh derp, perlu sudo. update-rc.d tidak memberikan umpan balik jika Anda lupa sudo. Saya mengkonfirmasi ls /etc/rc*.d
tautannya
Perintah gagal di Ubuntu16.04
Stephane
Pastikan Anda memberikan nama layanan yang benar, perbarui-rc.d tidak memberi Anda umpan balik jika itu tidak ada.
marcovtwout
Bagaimana jika Anda ingin mengaktifkannya kembali nanti? Di bawah @ "Tidak Sekarang" jawaban lebih baik, karena Anda dapat menonaktifkan dan mengaktifkan kembali setelah. update-rc.d apache2 disable
Wadih M.
54

Konfigurasikan Aplikasi Startup Linux dengan sysv-rc-conf :

apt-get install sysv-rc-conf

Seperti yang orang lain tunjukkan, ini juga update-rc.d untuk baris cmd.

Misalnya, jalankan

update-rc.d apache2 disable

untuk menonaktifkan apache2 dari semua level yang dijalankan.

Tidak sekarang
sumber
alat hebat - tidak tahu tentang itu. Terima kasih!
PEra
1
perhatikan bahwa ini tidak akan menghentikan layanan yang sedang berjalan, untuk mencapai itu Anda harus menambahkan ini: service foo stopatau me-reboot server
rubo77
15

Pendek:

Tidak ada cara yang dapat diandalkan untuk melakukan ini dengan cepat.

Panjang:

Debian saat ini (Debian tidak stabil pada 2012-06-01) saat ini tidak memiliki cara pendek yang dapat diandalkan untuk menonaktifkan layanan / daemon secara konsisten. - Karena pemutakhiran paket daemon tanpa syarat menjalankan "/etc/init.d/package restart", menonaktifkannya untuk runlevel ini atau tidak.

Untuk memastikan daemon tidak dimulai, Anda dapat:

  • uninstall itu
  • lakukan pengalihan lokal skrip /etc/init.d/xyz (dengan cara ini, tidak ada alat yang akan menemukannya)
  • menggunakan / menyalahgunakan file konfigurasi dari paket yang sesuai untuk memancing keluar lebih awal dari skrip itu (mis. letakkan "keluar" di awal / etc / default / xyz jika itu bersumber dari skrip init)
  • lihat di skrip init untuk cara "resmi" yang telah ditentukan untuk tidak memulai daemon itu

Ada / sedang (?) Beberapa langkah init-policy-something untuk skrip init di Debian, yang seharusnya mengisi fungsi yang hilang ini. - Saya mencoba menggunakannya, merasa rumit, menemukan bug, dan tidak pernah menyentuhnya lagi.

Memperbarui:

Beralih ke "systemd", sebuah alternatif untuk "initd". Paket debian ada, dan Anda dapat menonaktifkan layanan dengan sesuatu seperti ini:

cd /etc/systemd/system
ln -s /dev/null xyz.service
Robert Siemer
sumber
1
+1 Ini adalah jawaban yang sangat membantu - dan jika saya tidak mengalaminya saya akan tersengat nantinya - terima kasih!
Bisakah kamu unlink xyz.servicejuga?
jaggedsoft
@NextLocal, saya lupa mengapa saya menulis itu, tapi saya percaya jika layanan memiliki skrip init System V, systemdakan menggunakannya. - Jadi tautan memberitahukannya untuk tidak mencari mereka.
Robert Siemer
Perhatikan bahwa mengedit /etc/default/xyzfile untuk menambahkan tidak exitakan mencegah paket untuk menimpa file dengan versi yang benar pada peningkatan berikutnya. (Paket ini menyimpan file konfigurasi, dan dalam banyak kasus skrip init tidak dipandang seperti itu.) Jadi dalam kebanyakan kasus itu tidak akan membantu.
Alexis Wilke
Devuan datang untuk menyelamatkan: alih-alih systemd itu mencakup sistem SysV rc.d / init.d klasik (atau openrc juga jika seseorang memilih untuk itu).
Csaba Toth
5

Jalankan perintah ini

apt-get install rcconf

Setelah diinstal, jalankan rcconf di SSH dan Anda akan menerima kotak dialog yang menampilkan semua layanan yang diatur untuk dijalankan saat boot. Pilih yang dengan menekan Space untuk menonaktifkan / mengaktifkan tertentu dan Anda selesai, klik saja pada Ok dan layanan itu tidak akan repot untuk memulai lagi pada boot berikutnya. Menggunakan ini selama bertahun-tahun. Alat yang sangat berguna untuk pengguna Debian / Ubuntu seperti saya.

Mark Levinsky
sumber
Semudah 1,2,3! Terima kasih untuk alat baris perintah kecil ini.
DanielaWaranie
2

Saya bingung apa yang ingin Anda capai.

Di level apa Anda ingin menjalankan foo?

Jika Anda selalu ingin itu berjalan, gunakan update-rc.d foo defaults; yang akan menghentikannya dalam 0, 1 dan 6, sambil membiarkannya tetap berjalan dalam 2, 3, 4 dan 5. (1 seharusnya tidak menjalankan apa pun kecuali sebuah shell, 0 dan 6 berhenti dan reboot)

Jika Anda ingin menentukan dengan tepat level run yang akan dijalankan:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .
freiheit
sumber
2

Saya pikir ini akan melakukan pekerjaan: insserv -r foo

user38551
sumber
1

Mulai gunakan insserv dari Debian7

Keluarkan semua layanan dan jalankan informasi tingkat

insserv --showall

Hapus skrip yang terdaftar dari semua runlevel

insserv --remove [specify_script]
biji cokelat
sumber
0

Ubuntu Bootup Manager adalah jenis SysV-rc-conf cahaya , lebih ramah, versi GUI, dan banyak orang membaca thread ini akan menghargai itu.

http://www.marzocca.net/linux/bum.html


sumber
0

Pada sistem berbasis topi merah yang bisa Anda gunakan

chkconfig httpd off
chkconfig httpd --del

untuk menghapus server dari runlevels

pada sistem berbasis debian semua layanan seharusnya dimulai oleh file yang ditemukan di direktori /etc/rc?.d/, file-file ini kemudian memiliki tautan simbolis ke file terkait di direktori /etc/init.d/. Jika Anda menginginkan layanan tidak dimulai secara default maka Anda dapat mengganti nama / menghapusnya dari direktori /etc/rc?.d dan perubahan Anda akan dipertahankan pada peningkatan paket selama salah satu tautan awal masih muncul di salah satu direktori lainnya (3,4 dan 5). Atau Anda dapat menggunakan perintah update-rc.d untuk mengubah tautan dan jika Anda ingin memulai layanan setelahnya, Anda dapat menggunakan /etc/init.d/service_name start jika Anda membiarkan awal dari akhir itu akan memberi Anda opsi yang dapat digunakan seperti stop, restart, reload ...

Saya pikir Anda dapat menggunakan sysv-rc-conf untuk menonaktifkannya.

Rodent43
sumber
Pertanyaan itu ditandai Debian, bukan Fedora atau Red Hat.
0
sudo update-rc.d SERVICE disable

Jika Anda ingin menentukan level run.

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

Ingatlah untuk mengubah layanan ke nama program.

sudo service SERVICE restart
Eddie
sumber
0

Mengapa Anda tidak mencadangkan skrip startup di tempat lain dan menghapusnya di /etc/init.d/? Jika pembaruan-rc.d tidak berfungsi.

Kosaka Honoka
sumber