Cara Supaya Perintah Bash Tetap Jalan di Background Meskipun Terminal Ditutup
Ada saatnya ketika kita ingin menjalankan sebuah perintah bash, entah itu untuk mengimport data dari local ke database server, membuat file csv jutaan baris, dan lain sebagainya.
Kemudian, kita ingin perintah tersebut tetap tereksekusi di background process walaupun terminal Linux yang kita gunakan sudah ditutup/close.
Untuk dapat mencapai ini, kita bisa menggunakan perintah nohup di Linux, apa pun distronya jika itu Linux, bisa pakai perintah nohup ini.
Kenapa menggunakan nohup?
Dengan menggunakan nohup, proses dari perintah bash yang kita jalankan akan kebal terhadap sinyal SIGHUP.
Kenapa bisa begitu? Apa itu SIGHUP?
SIGHUP (Signal Hang Up) adalah sebuah sinyal yang dikirimkan ke proses yang berjalan pada sebuah terminal ketika terminal tersebut ditutup/close.
Jadi begini, katakanlah kita sedang menjalankan script python perulangan terus
menerus untuk ngeprint Hello World, kemudian kita jalankan script tersebut
dengan perintah bash python helloworld.py
di terminal.
Script python berhasil dijalankan dan akan menampilkan tulisan Hello World secara terus menerus karena kita set While = True.
Apa yang terjadi jika kita close terminal tersebut?
Kemungkinan yang umumnya terjadi adalah proses script python yang sedang
berjalan akan berhenti dan untuk menjalankannya lagi kita harus ketik perintah python helloworld.py
.
Jadi, ketika terminal diclose, semua proses yang terhubung ke terminal (foreground, background, atau stopped) biasanya akan menerima sinyal SIGHUP yang menandakan bahwa proses harus berhenti.
Nahh, berkat bantuan nohup pada Linux, kita bisa menjalankan sebuah proses yang tetap berjalan di background bahkan setelah menutup terminal.
Perintah nohup akan menjalankan sebuah proses di background dan mengabaikan sinyal SIGHUP ketika terminal ditutup, sehingga proses tersebut tetap berjalan di background bahkan setelah kita menutup terminal.
Cara menggunakan nohup
Untuk menggunakan nohup bisa dengan cara:
nohup <PERINTAH_YANG_INGIN_DIJALANKAN> &
Kita tambahkan simbol & di akhir yang artinya proses akan dijalankan di background.
Contoh, di sini saya ingin mem-ping google.com dengan interval 5 detik.
nohup ping -i 5 google.com &
Dari perintah tersebut akan menampilkan tulisan berikut, yang menunjukkan bahwa output dari perintah akan ditulis ke sebuah file bernama nohup.out.
nohup: ignoring input and appending output to 'nohup.out
Jika kita perhatikan, ada satu file terbuat dengan nama nohup.out.
Dan dari file ini kita bisa lihat output apa yang dihasilkan dari perintah yang kita jalankan, bisa berupa progress dari suatu import data, dalam contoh tutorial ini akan menampilkan ping google.com.
File ini akan ditaruh di folder saat ini berada jika bisa ditulisi/writable, tetapi jika tidak maka akan ditaruh di direktori home. Hal ini bertujuan untuk memastikan bahwa output tidak hilang jika terminal ditutup.
Jika kita tutup terminal dan buka yang baru, proses masih akan tetap berjalan.
Untuk menghentikan proses dari ping ini, kita harus temukan id prosesnya (PID) dahulu. KIta bisa lakukan dengan perintah dari pgrep. Gunakan pgrep -a untuk mencari proses ping tersebut.
pgrep -a ping
Dapat id prosesnya, yaitu 7572. Tinggal kita pakai perintah kill untuk menghentikan proses berdasarkan id proses (PID) tersebut.
kill 7572
Kita bisa hapus file nohup.out jika memang tidak dibutuhkan lagi.
Penutup
Sampai di sini kita sudah bisa menjalankan perintah bash di background prosess walaupun terminal sudah ditutup/close dengan perintah nohup bawaan distro Linux.
Sekian tutorial kali ini, jika masih ada kendala silakan komen di kolom komentar di bawah ini. Terima kasih telah membaca artikel ini dan semoga bermanfaat.