Bagaimana memastikan sshd adalah layanan terakhir yang dihentikan selama shutdown?

8

Saya perhatikan bahwa ketika saya mengeluarkan rebootperintah, koneksi SSH saya langsung ditutup pada CentOS 7. Itu tidak berarti server telah reboot, karena saya masih bisa melakukan ping.

Tampaknya systemd membunuh sshd terlalu dini. Terkadang layanan macet atau hanya lambat, dan saya tidak bisa masuk lagi untuk memverifikasi apa yang salah meskipun server sudah mati.

Apakah ada cara untuk memberitahu systemd untuk hanya membunuh sshd setelah semua layanan lain mati?

Giovanni Tirloni
sumber
8
Bukan jawaban untuk pertanyaan Anda, tetapi pengingat yang tidak membantu: semua server produksi harus memiliki KVM, kartu akses jarak jauh, atau akses kabel serial. (meskipun tergantung di mana shutdown berhenti, bahkan yang mungkin tidak berguna)
Andrew B
4
Ini tidak akan mudah; systemd secara paralel paralel dengan startup dan shutdown. Tidak hanya ssh yang langsung dibunuh, begitu juga banyak layanan lain, mungkin termasuk layanan yang sedang hang. Dapatkan konsol (jarak jauh) dan lihat, atau periksa log saat boot berikutnya.
Michael Hampton
Mungkin orang-orang baik di unix.stackexchange.com akan memiliki saran yang lebih baik untuk memodifikasi proses shutdown systemd?
Australia
Tampaknya systemd menggunakan beberapa pemesanan berdasarkan konfigurasi startup untuk pemesanan shutdown: serverfault.com/questions/618612/… tapi referensi tersebut tidak jelas dan panjang, saya pikir mereka mengarahkan Anda ke DefaultDependencies - sepertinya mengatakan bahwa jika perlu sesuatu untuk memulai, pada penutupan layanan tidak akan ditutup sebelum hal itu tergantung.
Mary

Jawaban:

1

Bahkan jika Anda dapat memastikan bahwa SSH adalah layanan terakhir yang ditutup, itu tidak ada gunanya, karena Anda akan kehilangan koneksi segera setelah layanan jaringan dihentikan.

Mesin Linux yang melakukan boot memulai semua layanan dalam urutan yang telah ditentukan: pertama layanan yang paling vital, syslog, firewall, kemudian jaringan, dan akhirnya aplikasi yang membutuhkan akses jaringan (server web, server SSH, dll.). Saat dimatikan, layanan ini dihentikan dalam urutan terbalik. Jadi Anda akan segera kehilangan koneksi SSH.

Fakta bahwa SSH sudah turun saat Anda masih bisa melakukan ping ke mesin remote adalah normal.

dr_
sumber
0

Ini sedikit meretas, tetapi bagaimana dengan menambahkan sesuatu seperti:

ExecStopPre=sleep 60

ke bagian "[Layanan]" /usr/lib/systemd/system/sshd.service? Itu tidak akan menjamin pemesanan shutdown, tetapi jika Anda bisa mentolerir waktu shutdown yang lebih lama, itu mungkin memungkinkan Anda untuk menjaga shell Anda aktif cukup lama untuk memverifikasi bahwa semuanya dihentikan ok, atau untuk melakukan pencarian cepat. Tidak yakin apakah ini membantu dalam kasus umum, karena mungkin sudah terlambat untuk membatalkan shutdown yang bermasalah pada tahap ini, tetapi ini bisa berguna dalam situasi di mana Anda memiliki masalah berulang selama shutdown yang Anda coba debug.

Paul Stauffer
sumber
-5

Saya tidak yakin apa yang Anda kejar di sini, tetapi hal pertama yang akan dipikirkan orang adalah mengubah prosesnya.

Jadi dalam kasus Anda, Anda dapat mengganti proses induk sshd:

       renice PRIO_MAX -p pid-of-sshd
ostendali
sumber
Itu akan mengubah prioritasnya dalam penjadwalan CPU ke near-realtime, tetapi tidak ada yang lain.
Falcon Momot