Bagaimana cara mengubah urutan layanan startup / boot Linux?

Jawaban:

11

Anda dapat mengubah urutan dengan mengganti nama symlink di bawah /etc/rcX.d/ di mana x akan menjadi level run Anda.

Anda akan melihat banyak file dimulai dengan Sxx atau Kxx. Tautan S dilacak saat startup sedangkan yang K diuraikan untuk dimatikan. Xx di sini mewakili urutan.

Tetapi urutan ini diatur karena suatu alasan, jadi berhati-hatilah saat mengubahnya. Sebagai contoh. ntpd harus dimulai hanya setelah subsistem jaringan diinisialisasi.

kain
sumber
21

Alih-alih melakukannya secara manual, seperti yang disarankan dalam jawaban lain, Anda juga dapat mengubah skrip init. Cukup tambahkan baris seperti itu ke header:

# chkconfig: 35 90 10

Ini akan memerintahkan chkconfiguntuk menambahkan layanan ke runlevel 3 dan 5, dengan posisi awal 90 dan posisi membunuh 10.

Kristen
sumber
Ini. Benar-benar ini. Jika Anda secara manual mengganti nama symlinks Anda akan mendapatkan kejutan jika seseorang datang dan berlarichkconfig off servicename && chkconfig on servicename
batfastad
Bekerja seperti pesona. Saya perlu mengkonfigurasi dependensi antara mysqld dan wadah servlet. Saya tidak bisa mengetahui posisi awal mysqld, jadi saya mengkonfigurasi posisi awal servlet untuk 99 dan berfungsi dengan baik, mysqld memulai lebih dulu. Terima kasih.
jpangamarca
7

Anda ingin membaca sedikit tentang runlevels dan direktori rc.d Anda . Di dalam direktori rc.d Anda dapat menemukan tautan S dan K, seperti S20apache K10apache, yang pada dasarnya adalah apa yang memerintahkan startup / shutdown skrip.

Ada beberapa perubahan yang dibuat pada arsitektur ini, tetapi sebagian besar linux masih menggunakannya.

coredump
sumber
Saya kagum sebagian besar distro masih menggunakan sistem ini; sistem yang lebih baik seperti rcordertelah ada untuk sementara waktu.
Chris S
Saya agak iri solaris svc, tetapi bisa melakukannya tanpa xml stuff
coredump
Ini tepat. Namun, tergantung pada distro Anda, Anda mungkin memiliki cara berbeda untuk mengubah nilai ini - jadi bacalah dokumentasi spesifik untuk distro Anda.
Andrew M.
1
Beberapa distribusi, seperti Ubuntu, menggunakan Upstart ( Wikipedia ).
Dijeda sampai pemberitahuan lebih lanjut.
7

Jika Anda telah tiba di sini, kemungkinan Anda memiliki dua layanan di mana satu tergantung pada yang lain tetapi, karena mereka mulai dalam urutan yang salah, yang dengan ketergantungan tidak memulai. Saran tentang pengeditan symlink bersifat informatif, dalam hal menggambarkan bagaimana urutan startup berjalan, dan akan bekerja dengan baik sampai seseorang melakukan "chkconfig on" pada layanan Anda di mana titik symlink akan dibuat kembali seperti semula. Sungguh, Anda ingin menangani masalah di tingkat skrip init, yang sebenarnya jauh lebih tidak berantakan untuk dilakukan. Ini juga akan konsisten di berbagai runlevel. Anda mungkin tidak perlu menambahkan baris "# chkconfig" seperti yang disarankan dalam jawaban 4 karena mungkin sudah ada baris serupa di sana.

Saya akan menggunakan contoh server yang menjalankan Openldap (slapd) dengan backend database MySQL (mysqld). Mengkonfigurasi pasangan itu, dan mengapa Anda mungkin ingin, adalah cerita lain.

Saat boot, Openldap gagal memulai karena itu bergantung pada MySQL dan urutan startupnya mencoba untuk memulai sebelumnya - slapd memiliki posisi 27 dan mysqld memiliki posisi 64

Symlinks yang relevan di /etc/rc3.d/ adalah

S27slapd -> ../init.d/slapd 
and
S64mysqld -> ../init.d/mysqld

Saya mencari nilai yang diatur dalam dua skrip init:

[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73 

Saya mengedit baris chkconfig di /etc/rc.d/init.d/slapd untuk memiliki posisi awal yang lebih tinggi daripada yang ada di /etc/rc.d/init.d/mysqld (saya memilih 85)

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73

Saya melakukan "chkconfig slapd on" dan periksa kembali symlinks

[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx  1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx  1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd

Sekarang, ketika server ini dinyalakan, mysqld mulai sebelum slapd dan semuanya beres dengan dunia.

Jim Smyth
sumber