Biarkan proses tetap hidup setelah keluar SSH

5

Saya mencoba untuk mengukur bandwidth, kehilangan paket, latensi dan jitter antara dua komputer pada koneksi nirkabel 802.11s.

Saya mencoba membuat skrip bash (pertama saya) yang dapat melakukan hal berikut:

  1. SSH ke komputer lain dan mulai penebangan data dari layanan ( ptpd, tcpdump, iperf).
  2. Mulai proses yang sama di komputer saya sendiri dan mulai mencatat data.
  3. Setelah iperftransmisi di komputer saya sendiri selesai, seharusnya SSH masuk ke komputer jarak jauh dan mematikan layanan.

Idenya adalah untuk ini tiga langkah ini berjalan dalam for-loop, yang meningkatkan ukuran paket yang dikirimkan oleh iperf untuk setiap iterasi dan mencatat data yang dihasilkan.

Saya tahu cara memulai proses pada pc jarak jauh dengan ssh host@adress process.

Namun saya tidak tahu bagaimana memulai beberapa proses melalui SSH dan logout, karena proses dihentikan setelah saya logout. Saya telah melihat perintah screendan nohup, tetapi tidak tahu bagaimana menggunakannya dalam skrip.

Terima kasih sebelumnya!

SUNTING:

Terima kasih atas semua bantuannya sejauh ini.

Saya tidak dapat bekerja sekarang, itu cukup sederhana seperti yang ditunjukkan orang. Jadi sekarang saya dapatkan: ssh host@adress nohup ./script.sh > /dev/null 2>&1 &di script di pc utama saya. Ini memulai skrip pada pc jarak jauh dengan baik, dan kemudian keluar dari SSH. Masalah selanjutnya adalah bagaimana menjalankan skrip pada remote pc sebagai sudo, karena ini diperlukan oleh tcpdump.

Mencoba ssh host@adress **sudo** nohup ./script.sh > /dev/null 2>&1 &tidak berfungsi.

Ada ide?

EDIT 2:

Jika ada yang terjebak dengan masalah yang sama, saya menemukan panduan cara mengatasi ini:

http://www.pantz.org/software/ssh/using_ssh_and_sudo_instead_of_root_for_remote_commands.html

Thomas
sumber

Jawaban:

7

Gunakan screen.

Beberapa jalan pintas yang berguna:

  • ctrl + a + c: buat "jendela" baru
  • ctrl + a + n: buka "jendela" berikutnya
  • ctrl + a + p: buka "jendela" sebelumnya
  • ctrl + a + d: lepaskan sesi (itu terus berjalan)

Setelah melepaskan, gunakan screen -runtuk melanjutkan sesi. Ada juga screen -xjika sesi layar tidak terlepas, tetapi pergi ke latar belakang dengan cara lain (atau sebenarnya masih berjalan di terminal lain).

Ivan Vučica
sumber
5

Dari --helppada nohup;

Usage: nohup COMMAND [ARG]...
  or:  nohup OPTION
Run COMMAND, ignoring hangup signals.

Cukup tambahkan sebuah &ke nohup <whatever you want to run>perintah Anda . Itu berarti bahwa kecuali jika Anda secara khusus membunuh nohupproses melahirkan , itu tidak akan pernah pergi.

Anda dapat melewatkan nohup sepenuhnya dengan screenatau tmux, yang saya dengar akan membuat proses tetap berjalan meskipun koneksi ke host jarak jauh sudah mati (yang merupakan salah satu kekuatan yang agak dahsyat). Saya tidak tahu bagaimana melakukan ini, jadi Anda perlu membaca sendiri dengan melakukan man screen/ man tmuxsetelah mengunduhnya.

qweet
sumber
2

Anda dapat menambah program dengan nohup.

Misalnya nohup myprogram &. Itu akan memulai program dan mengirim semua output ke file bernama nohup.out. Ini juga akan menangkap sigHUP saat Anda logout.

Solusi lain adalah dengan menjalankan screenatautmux

Hennes
sumber
0

Jawabannya ada di pertanyaan Anda. Gunakan perintah screenatau nohup. Apa yang tidak Anda mengerti tentang cara menggunakannya?

Mencoba

ssh host@address nohup command args &. The & menempatkan sshshell ke latar belakang pada sistem lokal, yang berarti bahwa sshterowongan akan tetap selama itu bisa. Tetapi nohupperintah itu akan mencegah commandjalannya sistem remote dari dihentikan jika, karena alasan apa pun, sshproses lokal mengakhiri atau kehilangan koneksi ke host jarak jauh.

allquixotic
sumber
PS: Anda perlu memberi tanda kutip pada perintah yang ingin Anda jalankan (saya menggunakan tanda kutip tunggal untuk ukuran yang baik), jika tidak maka akan mengirim sesi ssh ke latar belakang daripada perintah yang ingin Anda jalankan.
qweet
Ya saya tidak bisa bekerja sekarang, itu cukup sederhana seperti yang Anda tunjukkan. Sekarang saya dapat: ssh host @ adress nohup ./script.sh> / dev / null 2> & 1 &. Ini menjalankan skrip pada pc jarak jauh dengan baik. Masalah selanjutnya adalah menjalankan skrip pada remote pc sebagai sudo, karena ini dibutuhkan oleh tcpdump?
Thomas