Tutup, tapi tidak persis.
Secara independen dari terminal apa pun
ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'
Anda harus menutup semua deskriptor file yang terhubung ke soket ssh, karena sesi ssh tidak akan ditutup selama beberapa proses jarak jauh membuka soket. Jika Anda tidak tertarik dengan output skrip (mungkin karena skrip itu sendiri mengurus penulisan ke file log), arahkan kembali ke /dev/null
(tetapi perhatikan bahwa ini akan menyembunyikan kesalahan seperti tidak dapat memulai skrip).
Penggunaan nohup
tidak memiliki efek yang berguna di sini. nohup
mengatur program yang dijalankannya untuk tidak menerima sinyal HUP jika terminal pengendali program menghilang, tetapi di sini tidak ada terminal sejak awal, jadi tidak ada yang akan mengirim SIGHUP ke proses secara tiba-tiba. Juga, nohup
mengarahkan ulang output standar dan kesalahan standar (tetapi bukan input standar) ke file, tetapi hanya jika mereka terhubung ke terminal, yang, sekali lagi, mereka tidak.
Melepaskan dari terminal
aaron@localpc$ ssh root@remoteserver
root@remoteserver# nohup /root/backup.sh </dev/null &
nohup: appending output to `nohup.out'
[1] 12345
root@remoteserver# exit
aaron@localpc$
Gunakan nohup
untuk melepaskan skrip dari terminal pengendali sehingga tidak menerima SIGHUP saat terminal hilang. nohup
juga mengalihkan keluaran standar skrip dan kesalahan standar ke file yang dipanggil nohup.out
jika mereka terhubung ke terminal; Anda harus mengurus sendiri input standar.
Menyimpan terminal jarak jauh
Jika Anda ingin agar perintah tetap berjalan di terminal jarak jauh tetapi tidak memilikinya melekat pada sesi SSH, jalankan di terminal multiplexer seperti Layar atau Tmux .
ssh root@remoteserver 'screen -S backup -d -m /root/backup.sh'
Anda nanti dapat menyambung kembali ke terminal tempat skrip berjalan dengan memanggil screen -S backup -rd
sebagai root pada mesin itu.
Mengotomatiskan satu perintah jarak jauh
Untuk keamanan yang sedikit lebih baik, jangan membuka login root jarak jauh langsung terlalu banyak. Buat pasangan kunci tujuan khusus dan berikan perintah paksa /root/.ssh/authorized_keys
. Isi file kunci publik adalah AAAA…== wibble@example.com
; tambahkan daftar opsi command="…"
yang dipisahkan koma termasuk yang menentukan bahwa kunci hanya dapat digunakan untuk menjalankan perintah khusus ini. Pastikan untuk menyimpan semua opsi dan kunci pada satu baris.
command="/root/backup.sh </dev/null >/dev/null 2>/dev/null &",no-port-forwarding,no-agent-forwarding,no-x11-forwarding,no-pty,no-user-rc AAAA…== wibble@example.com