Perintah nohup: cara pakai, nohup.out, dan tetap berjalan setelah terminal ditutup
Agar pekerjaan tetap berjalan meski Anda menutup terminal atau koneksi SSH terputus, jalankan dengan perintah nohup. nohup menjalankan perintah dengan membuatnya mengabaikan sinyal putus (SIGHUP) yang datang saat terminal ditutup. Saat sleep dengan nohup dan sleep tanpa nohup dijalankan bersamaan di server AlmaLinux 9 lalu terminal ditutup, hanya yang dijalankan dengan nohup yang tetap berjalan.
Output di bawah berasal dari server AlmaLinux 9.8 (akun root) dan server Debian 12 (akun biasa). Sebagai ganti pekerjaan yang berjalan lama, yang dijalankan adalah sleep, dan saat menghentikannya hanya PID yang diterima saat menjalankan yang disebutkan. Waktu ditampilkan dalam UTC.
1️⃣ Cara memakai perintah nohup
nohup ditaruh di depan perintah yang akan dijalankan, dan tanda & di akhir perintah menentukan eksekusi di latar belakang. Menurut manual resmi GNU, nohup sendiri tidak mengirim perintah ke latar belakang, jadi tanpa & prompt baru kembali setelah perintah selesai.
nohup sleep 300 &[1] 3431609
nohup: ignoring input and appending output to 'nohup.out'[1] adalah nomor job, dan 3431609 adalah PID proses yang dijalankan. Pesan yang muncul berikutnya memberi tahu bahwa input keyboard tidak dibaca dan output ditambahkan ke file nohup.out.
PID job yang baru saja dijalankan tersimpan di $!. Periksa dengan [echo $!] tepat setelah menjalankannya lalu catat; nomor yang sama itulah yang dipakai untuk melihat status atau menghentikannya.
echo $!3431609Saat terminal ditutup, shell menerima sinyal putus dan mengirim sinyal yang sama ke job yang dijalankannya (menurut manual resmi Bash). Untuk memastikan perilaku ini, di terminal baru dijalankan bersamaan [nohup sleep 300 &] dan, tanpa nohup, [sleep 301 &].
sleep 301 &[2] 3432892jobs -l[1]- 3432883 Running nohup sleep 300 &
[2]+ 3432892 Running sleep 301 &Saat kedua job berstatus Running, jendela terminal ditutup, lalu kedua PID diperiksa dengan ps dari shell lain.
ps -p 3432883,3432892 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3432883 S 00:05 sleep 300Hanya sleep 300 yang dijalankan dengan nohup yang tersisa; sleep 301 yang dijalankan tanpa nohup ikut berhenti saat terminal ditutup.
Proses yang dijalankan dengan nohup seperti ponsel yang mode Jangan Ganggu-nya aktif.
nohup adalah perintah dari paket coreutils. Versi yang terpasang dapat dilihat di baris pertama --version. Server AlmaLinux 9.8 memakai 8.32, server Debian 12 memakai 9.1.
nohup --version | head -1nohup (GNU coreutils) 8.32nohup --version | head -1nohup (GNU coreutils) 9.12️⃣ nohup.out dan pengalihan output
Jika Anda tidak menentukan ke mana output pergi, nohup menambahkan output perintah ke nohup.out di folder saat ini. nohup.out yang baru dibuat berukuran 0 byte, dengan izin -rw-------, yang hanya bisa dibaca dan ditulis oleh pengguna yang membuatnya.
ls -l nohup.out-rw------- 1 root root 0 Oct 28 23:04 nohup.outManual resmi GNU menjelaskan bahwa nohup membuat nohup.out agar hanya pengguna yang membuatnya yang bisa membaca dan menulisnya, apa pun pengaturan umask. Jika tidak bisa menulis ke folder saat ini, nohup menulis ke $HOME/nohup.out di folder home, dan jika di sana pun tidak bisa, perintah tidak dijalankan.
Saat perintah yang menghasilkan output dijalankan dengan nohup, output tetap ada di nohup.out setelah perintah selesai.
nohup sh -c 'echo start; sleep 2; echo end' &[1] 3431985
nohup: ignoring input and appending output to 'nohup.out'cat nohup.outstart
end
[1]+ Done nohup sh -c 'echo start; sleep 2; echo end'Done di baris terakhir adalah pemberitahuan shell bahwa job sudah selesai. nohup.out tidak dibuat ulang setiap kali dijalankan, tetapi ditambahkan di akhir file yang sama, jadi jika Anda menjalankan beberapa job dari folder yang sama, output-nya bercampur dalam satu file.
Agar setiap job punya log sendiri, tentukan file output dengan > dan kirim juga output error ke file yang sama dengan 2>&1.
nohup sh -c 'echo start; sleep 300' > job.log 2>&1 &[1] 3432059cat job.lognohup: ignoring input
startSetelah 2>&1 ikut ditambahkan, terminal hanya menampilkan nomor job dan PID, dan pesan nohup [nohup: ignoring input] tercatat di baris pertama file log.
Jika Anda hanya menambahkan > tanpa 2>&1, terminal menampilkan pesan bahwa output error dialihkan ke file output standar.
nohup sleep 300 > job2.log &[2] 3432097
nohup: ignoring input and redirecting stderr to stdoutOutput dari job yang tidak perlu disimpan dikirim ke /dev/null. Dalam hal ini pun terminal hanya menampilkan nomor job dan PID.
nohup sleep 300 > /dev/null 2>&1 &[3] 3432137Tabel di bawah menunjukkan ke mana output pergi dan pesan apa yang muncul di terminal untuk keempat cara menjalankan.
| Cara menjalankan | Tujuan output | Pesan di terminal |
|---|---|---|
| nohup perintah & | nohup.out di folder saat ini | nohup: ignoring input and appending output to 'nohup.out' |
| nohup perintah > file & | File yang ditentukan (termasuk output error) | nohup: ignoring input and redirecting stderr to stdout |
| nohup perintah > file 2>&1 & | File yang ditentukan | Tidak ada (pesan ada di baris pertama file) |
| nohup perintah > /dev/null 2>&1 & | Dibuang | Tidak ada |
3️⃣ Memeriksa dan menghentikan proses nohup
Daftar jobs hanya menampilkan job yang dijalankan dari shell saat ini, jadi setelah menutup terminal dan tersambung lagi, periksa proses nohup dengan ps -p dan PID-nya. Selama Anda masih di shell yang sama, jobs -l menampilkan nomor job, PID, dan status sekaligus.
jobs -l[1]+ 3431609 Running nohup sleep 300 &Jika Anda menulis PID setelah ps -p dan memilih kolom dengan -o, hanya baris proses itu yang muncul. S pada STAT berarti proses sedang tidur sambil menunggu suatu peristiwa, dan ELAPSED adalah waktu sejak proses dimulai.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3431609 S 00:03 sleep 300Untuk menghentikannya, gunakan kill diikuti PID.
kill 3431609kill tidak menampilkan apa pun, dan saat jobs dijalankan berikutnya, job itu muncul sebagai Terminated lalu hilang dari daftar.
jobs[1]+ Terminated nohup sleep 300Saat ps dijalankan lagi dengan PID yang sama, hanya baris judul yang muncul, sehingga terkonfirmasi bahwa proses sudah berhenti.
ps -p 3431609 -o pid,stat,etime,cmd PID STAT ELAPSED CMDnohup hanya mengabaikan sinyal putus, jadi mengirim sinyal yang sama langsung dengan [kill -HUP] pun tidak menghentikannya. kill -HUP dikirim ke sleep 305 yang dijalankan dengan nohup dan ke sleep 306 yang dijalankan tanpa nohup.
kill -HUP 3437119 3437128Pemeriksaan berikutnya dengan jobs -l menunjukkan hanya yang dengan nohup yang masih Running, sedangkan sleep 306 berhenti dengan Hangup.
jobs -l[1]- 3437119 Running nohup sleep 305 &
[2]+ 3437128 Hangup sleep 306Jika kill tidak diberi sinyal, ia mengirim SIGTERM, jadi job yang dijalankan dengan nohup pun berhenti dengan [kill PID].
4️⃣ Perbandingan perintah nohup dengan disown, dan opsi
🔲 Perbandingan nohup dan disown
disown adalah perintah bawaan bash untuk job yang sudah berjalan: dipakai untuk melepas belakangan job yang dijalankan dengan & tanpa nohup dari sinyal putus terminal. disown tidak mengalihkan output ke nohup.out, jadi untuk job yang menghasilkan output, tentukan tujuan output dengan > file saat menjalankannya.
Menurut manual resmi Bash, disown tanpa opsi mengeluarkan job dari daftar jobs, sedangkan disown -h membiarkannya di daftar dan hanya mencegah sinyal putus dikirim kepadanya. Pertama, sleep 302 dijalankan lalu disown dijalankan.
sleep 302 &[1] 3433230disowndisown tidak menampilkan apa pun, dan jobs -l yang dijalankan sesudahnya juga kosong.
jobs -lBerikutnya, sleep 303 dijalankan dan disown -h dijalankan pada nomor job %1.
sleep 303 &[1] 3433343disown -h %1Pemeriksaan dengan jobs -l menunjukkan job itu tetap ada di daftar.
jobs -l[1]+ 3433343 Running sleep 303 &Ditambah satu lagi sleep 304 tanpa penanganan apa pun, terminal ditutup, lalu ketiga PID diperiksa dari shell lain.
sleep 304 &[2] 3433474ps -p 3433230,3433343,3433474 -o pid,stat,etime,cmd PID STAT ELAPSED CMD
3433230 S 00:11 sleep 302
3433343 S 00:08 sleep 303Dua job yang diberi disown dan disown -h tetap ada, dan hanya sleep 304 yang tanpa penanganan yang berhenti. Perbandingan keempat cara sebagai berikut.
| Cara | Kapan dipakai | Daftar jobs | Setelah terminal ditutup | Output |
|---|---|---|---|---|
| nohup perintah & | Saat menjalankan | Tetap ada | Tetap ada | nohup.out atau file yang ditentukan |
| perintah & lalu disown | Setelah dijalankan | Dilewati | Tetap ada | Tidak diubah |
| perintah & lalu disown -h | Setelah dijalankan | Tetap ada | Tetap ada | Tidak diubah |
| Hanya perintah & | — | Tetap ada | Sudah berakhir | Tidak diubah |
Untuk pekerjaan yang perlu memanggil kembali layar sesi dan lanjut mengetik, multiplexer terminal seperti tmux lebih cocok; untuk pekerjaan yang dijalankan sekali dan hanya diambil hasilnya dari file, nohup sudah cukup.
🔲 Opsi perintah nohup
📌 Opsi utama: hasil dari artikel ini
| Opsi | Fungsi | Hasil di artikel ini | |
|---|---|---|---|
| --version | Menampilkan informasi versi lalu keluar | Server AlmaLinux 9.8: nohup (GNU coreutils) 8.32, server Debian 12: nohup (GNU coreutils) 9.1 |
📎 Opsi lainnya: menurut manual resmi
| Opsi | Fungsi | |
|---|---|---|
| --help | Menampilkan bantuan lalu keluar |
🔲 Simulator perintah nohup
Di simulator di bawah, Anda bisa menjalankan job dengan nohup, menutup terminal dan tersambung lagi dengan chip 🔌, lalu melihat sendiri proses mana yang tersisa.
🔢 FAQ & Konten yang Direkomendasikan
Penjadwalan
Linux: Pengaturan crontab
Pengaturan crontab, penjadwal Linux yang mendaftarkan pekerjaan untuk diulang pada waktu tertentu, seperti backup atau pembersihan log.
Proses
Perintah top Linux (memeriksa pemakaian CPU dan memori)
Perintah top yang menampilkan penggunaan CPU dan memori per proses secara real time.
ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.