Saya menggunakan reboot -f
perintah dari jarak jauh untuk memaksa reboot mesin Unix. Masalahnya adalah koneksi ssh tetap aktif untuk waktu yang lama dan saya tidak tahu mengapa? Saya ingin menutup koneksi ssh segera setelah me-reboot mesin dan kembali ke shell lokal saya. Bagaimana saya bisa melakukan itu? Perhatikan bahwa perintah reboot tanpa -f
bendera tidak berfungsi.
18
Enter
. Kemudian mis~.
untuk mengakhiri sesi.Enter ~?
untuk daftar orang lain.Jawaban:
Perintah
reboot -f
tidak pernah kembali (kecuali Anda tidak memiliki izin untuk menyebabkan reboot). Pada saat diterbitkan, klien SSH sedang menunggu sesuatu untuk dilakukan, yang bisa berupa:Karena proses server SSH sudah mati, klien SSH tidak akan mati sampai timer menyala.
Jika Anda berlari
ssh remotehost 'reboot -f >/dev/null &'
, maka yang terjadi adalah:reboot
perintah di latar belakang.reboot
perintah menyebabkan mesin untuk reboot.Namun, ini tidak dapat diandalkan: tergantung pada waktu, langkah 3 mungkin terjadi sebelum langkah 2. Menambahkan timer membuat ini tidak mungkin:
Untuk benar-benar yakin bahwa sisi server berkomitmen untuk menjalankan
reboot
, sambil memastikan bahwa itu tidak benar-benar reboot sebelum memberi tahu klien bahwa itu berkomitmen, Anda perlu pemberitahuan tambahan untuk pergi dari server ke klien. Ini bisa berupa output melalui koneksi SSH, tetapi menjadi rumit.sumber
(sleep 1 && sudo reboot &) && exit
. Tanda kurung menelurkan subproses, yang menunggu satu detik dan kemudian memulai reboot. Namun proses host segera mengakhiri sesi ssh. Saya bukan guru shell, tapi sejauh ini berhasil bagi saya.Saya menemukan solusi ini untuk melakukan yang terbaik untuk saya.
Gunakan
-o "ServerAliveInterval 2"
denganssh
perintah Anda , seperti:Opsi tersebut membuat sisi klien menyodok server melalui saluran aman setiap 2 detik. Akhirnya ketika proses booting ulang, itu akan berhenti untuk merespons dan klien akan merobohkan koneksi.
sumber
Beberapa jawaban sudah dekat, tetapi jawaban yang tepat adalah:
penjelasan:
exit
sebagai perintah terakhir sehingga status dari perintah terakhir adalah 0 (berhasil). Anda dapat menambahkan tidur jika diinginkan, tetapi itu tidak perlustdin
danstdout
masih terpasang ke terminal virtual melalui SSH, sehingga koneksi tidak akan ditutup. Anda perlu melakukan dua hal tambahan untuk mengakhiri sesi SSH dan membiarkan perintah berjalan di latar belakang.stdout
danstderr
ke/dev/null
sehingga mereka tidak diarahkan oleh terminal virtual yang memegang sesi SSH. Ini&>/dev/null
bagiannya.stdin
ke file yang tidak dapat dibaca dengan cara yang sama. Itulah yang dilakukan oleh shell builtinnohup
.Dengan hanya perintah yang berjalan di latar belakang terlepas dari terminal dengan segala cara,
exit
akan menutup sesi dan karena tidak adastdin
ataustdout
tertinggal pada terminal virtual SSH akan memutuskan koneksi tanpa kesalahan.sumber
Saya menggunakan perintah berikut:
ssh -t <hostname> 'sudo shutdown --reboot 0 && exit'
Inilah yang dilakukan:
sumber
Sudahkah Anda mencoba yang berikut ini
Saya menemukan bahwa pada beberapa sistem saya bekerja di pass, perintah reboot punya beberapa masalah. Kemudian lagi saya tidak dapat menemukan apa pun di halaman shutdown yang akan melakukan hal yang sama dengan reboot dengan flag -f.
sumber
Bagaimana keluar dari sesi ssh dan reboot sistem menggunakan perintah berikut:
Setelah ini cukup tekan Ctrl + C untuk mengakhiri ssh.
sumber
Saya menemukan solusi untuk ini yang mungkin bermanfaat bagi orang lain juga. Saya menggunakan perintah berikut untuk menutup koneksi setelah memulai perintah yang dilampirkan ke ssh:
Saya tidak benar-benar mengerti alasan mengapa perintah ini memaksa koneksi ditutup tetapi setidaknya itu membantu saya. Jika ada yang mengerti mengapa ini membunuh koneksi ssh; tolong jelaskan.
sumber
Ini membutuhkan penundaan 1 menit tetapi telah bekerja dengan andal bagi saya dan menyelesaikan masalah hang klien SSH:
Ini menjadwalkan shutdown sistem selama 1 menit kemudian yang memungkinkan waktu untuk logout, dan karenanya terminasi SSH, selesai. Jika Anda ingin menunggu sesedikit mungkin, Anda dapat mengganti
+1
denganHH:MM
untuk waktu yang cepat mendekati hari tetapi itu mungkin sulit untuk waktu dengan benar dan mungkin memiliki hingga 59 detik penundaan.sumber
Cara sederhana yang saya temukan, adalah memerintahkan shutdown / reboot sebagai tugas latar belakang (menggunakan '&'), melindunginya agar tidak ditutup ketika sesi ditutup dengan 'nohup', bersama dengan keluar langsung shell / sesi:
nohup shutdown -r now & exit
Dengan cara ini, klien SSH tidak hang, karena sesi segera keluar, sementara sistem jarak jauh melanjutkan dengan reboot secara tidak sinkron.
sumber
Coba perintah ini:
sumber
reboot -f
.