GNU/Linux >> Belajar Linux >  >> Linux

Perintah Nohup dengan Contoh

Nohup adalah singkatan dari 'no hang up', dan seperti yang ditunjukkan oleh namanya, mencegah perintah dibatalkan secara otomatis saat Anda keluar atau keluar dari shell.

Saat Anda menjalankan perintah Linux dan keluar setelah beberapa waktu dari sesi jika perintah itu belum selesai dijalankan, prosesnya akan terhenti.

Ada berbagai macam program yang membutuhkan waktu berjam-jam untuk diselesaikan. Kita tidak perlu menunggu perintah untuk menyelesaikan seluruh tugas. Kita dapat membuat program tetap berjalan di latar belakang dengan menggunakan perintah nohup dan memeriksa hasilnya nanti.

Sintaks perintah nohup

Sintaks dari perintah nohup adalah:

nohup COMMAND [ARG]...

Secara default, output dari suatu perintah ditampilkan pada perangkat output standar yang merupakan terminal yang memulai proses. Tetapi karena terminal mungkin ditutup selama masa proses anak, maka terminal tidak dapat menjadi perangkat keluaran lagi. Menurut halaman info perintah nohup,

If standard output is a terminal, the command's standard output is appended to the file `nohup.out'; if that cannot be written to, it is appended to the file `$HOME/nohup.out'; and if that cannot be written to, the command is not run. Any `nohup.out' or `$HOME/nohup.out' file created by `nohup' is made readable and writable only to the user, regardless of the current umask settings.

Demikian pula untuk kesalahan standar,

If standard error is a terminal, it is normally redirected to the same file descriptor as the (possibly-redirected) standard output. However, if standard output is closed, standard error terminal output is instead appended to the file `nohup.out' or `$HOME/nohup.out' as above.

Ini berarti bahwa secara default keluaran standar dan kesalahan standar dialihkan ke file 'nohup.out'. Tetapi jika Anda ingin mengarahkan output ke beberapa file lain, Anda selalu dapat melakukannya dengan menggunakan operator redirect. Misalnya, untuk menangkap output dari make,

nohup make > make.log

Untuk masukan standar,

If standard input is a terminal, it is redirected from `/dev/null' so that terminal sessions do not mistakenly consider the terminal to be used by the command. This is a GNU extension; programs intended to be portable to non-GNU hosts should use `nohup COMMAND [ARG]...

Perintah nohup tidak secara otomatis menempatkan perintah di latar belakang. Ini harus dilakukan secara eksplisit dengan &.

nohup make > make.log &

Juga, perintah ini tidak mengubah kebaikan (yaitu prioritas) dari suatu perintah. Untuk ini, perintah Nice digunakan sebagai contoh 'nohup nice COMMAND'.

Cara menggunakan perintah nohup

Kita dapat menggunakan nohup dengan dua cara. Pertama menjalankan perintah dengan parameter tanpa menerima input lain saat bekerja. Semua output, termasuk pesan kesalahan, akan ditulis ke file nohup.out di direktori kerja, atau di direktori home Anda. Jika perintah masih berjalan saat Anda logout atau menutup terminal, perintah tersebut tidak akan dihentikan.

Mari kita coba contoh dengan aplikasi memtester.

$ nohup sudo memtester 2048 5
nohup: ignoring input and appending output to 'nohup.out'
Killed

$ cat nohup.out 
memtester version 4.3.0 (64-bit)
Copyright (C) 2001-2012 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).

pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 2048MB (2147483648 bytes)
got  1876MB (1968074752 bytes), trying mlock ...

Anda juga dapat mengarahkan output ke beberapa file lain alih-alih nohup.out menggunakan simbol>.

$ nohup sudo memtester 2048 5 > result.txt

Gunakan perintah nohup dengan '&'

Untuk memulai proses dan meletakkannya di latar belakang, pada dasarnya Anda menjalankan perintah diikuti dengan simbol "&". Simbol "&" di akhir perintah memerintahkan bash untuk menjalankan nohup yourcommand di latar belakang. Itu dapat dibawa kembali ke latar depan dengan perintah fg.

$ nohup bash sleep1.sh &
[1] 653
$ nohup: ignoring input and appending output to 'nohup.out'
fg
-bash: fg: job has terminated
[1]+  Exit 127                nohup bash sleep1.sh

Jalankan beberapa perintah di latar belakang

Anda dapat menjalankan beberapa perintah di latar belakang dengan menggunakan perintah nohup. Pada contoh berikut, perintah mkdir, touch dan ls dijalankan di latar belakang dengan menggunakan perintah nohup dan bash.

$ nohup bash -c 'mkdir TestDir && touch test2.file && ls'> output.txt
nohup: ignoring input and redirecting stderr to stdout

$ cat output.txt 
TestDir
nohup.out
output.txt
test2.file
testfile.txt

Memulai dan mengakhiri proses di latar belakang

Jika Anda menjalankan perintah ping menggunakan nohup, proses tidak akan berhenti ketika Anda menutup terminal.

$ nohup ping -i 15 linoxide.com &
[1] 806
$ nohup: ignoring input and appending output to 'nohup.out'

Anda dapat menutup terminal dan membukanya kembali. Sekarang jalankan perintah pgrep dengan -a pilihan.

$ pgrep -a ping
816 ping -i 15 linoxide.com

Anda akan mendapatkan daftar proses dengan id proses yang sedang berjalan. Seperti yang Anda lihat, perintah ping yang kami jalankan tidak dihentikan. Untuk menghentikan proses latar belakang, Anda harus menjalankan perintah kill. Sebagai parameter, kita harus menggunakan id proses tertentu yang sedang berjalan.

Dalam kasus kami, id prosesnya adalah 816. Jalankan kill 816 untuk menghentikan proses.

$ pgrep -a ping
816 ping -i 15 linoxide.com
$ kill 816

Kesimpulan

Nohup sangat membantu ketika Anda harus menjalankan skrip shell. Tmux, Screen dan Disown adalah beberapa utilitas alternatif yang melakukan pekerjaan yang sama seperti nohup.

Saya harap Anda sekarang akrab dengan alat ini yang dapat berguna dalam banyak kasus. Jika Anda memiliki pertanyaan atau komentar, silakan kirimkan di bawah ini.


Linux
  1. Perintah Tee Linux dengan Contoh

  2. Perintah kepala Linux dengan Contoh

  3. Perintah JQ di Linux dengan Contoh

  1. Perintah wc Linux dengan Contoh

  2. Perintah sortir Linux dengan Contoh

  3. Perintah Echo di Linux (Dengan Contoh)

  1. Perintah man di Linux dengan Contoh

  2. Perintah AWK di Linux dengan Contoh

  3. Perintah Curl di Linux dengan Contoh