Bagaimana menjalankan skrip shell di latar belakang?

57

Bagaimana saya bisa menjalankan skrip shell di latar belakang?

erkan şentürk
sumber

Jawaban:

97

Bergantung pada apa yang Anda inginkan, tambahkan saja & ke akhir perintah

script.sh &
command &

Jika Anda menjalankannya di terminal, dan Anda ingin kemudian menutup terminal, gunakan nohup atau disown

tidak

nohup script.sh &

memungkiri

script &
disown

Jika itu bukan yang Anda cari, harap lebih spesifik dalam pertanyaan Anda.

Harimau kumbang
sumber
Terima kasih kembali
Panther
Bagaimana jika saya misalnya perlu menjalankan 2 scipts dan kemudian saya ingin menjalankan htopuntuk melihat penggunaan CPU, tetapi masalahnya adalah skrip pertama mulai membuat output ke konsol dan sepertinya mencegah tindakan lain (jalankan skrip kedua, jalankan htop).
mrgloom
jika skrip memiliki pernyataan cetak, apakah akan ditampilkan di terminal saya?
Charlie Parker
2

Anda cukup mengganti layar dan menjalankan skrip pada layar ke-2 itu. Ketika skrip dimulai pada tanggal 2, kembali ke tanggal 1 dan lakukan apa pun yang Anda inginkan. Layar ke-2 akan di latar belakang sebagai "jendela terminal" tambahan. dan itu tidak akan berhenti memproses bahkan ketika Anda menutup koneksi ssh Anda saat beeing di layar 1.

screen --help
Use: screen [-opts] [cmd [args]]
 or: screen -r [host.tty]

Options:
-4            Resolve hostnames only to IPv4 addresses.
-6            Resolve hostnames only to IPv6 addresses.
-a            Force all capabilities into each window's termcap.
-A -[r|R]     Adapt all windows to the new display width & height.
-c file       Read configuration file instead of '.screenrc'.
-d (-r)       Detach the elsewhere running screen (and reattach here).
-dmS name     Start as daemon: Screen session in detached mode.
-D (-r)       Detach and logout remote (and reattach here).
-D -RR        Do whatever is needed to get a screen session.
-e xy         Change command characters.
-f            Flow control on, -fn = off, -fa = auto.
-h lines      Set the size of the scrollback history buffer.
-i            Interrupt output sooner when flow control is on.
-l            Login mode on (update /var/run/utmp), -ln = off.
-ls [match]   or -list. Do nothing, just list our SockDir [on possible matches].
-L            Turn on output logging.
-m            ignore $STY variable, do create a new screen session.
-O            Choose optimal output rather than exact vt100 emulation.
-p window     Preselect the named window if it exists.
-q            Quiet startup. Exits with non-zero return code if unsuccessful.
-r [session]  Reattach to a detached screen process.
-R            Reattach if possible, otherwise start a new session.
-s shell      Shell to execute rather than $SHELL.
-S sockname   Name this session <pid>.sockname instead of <pid>.<tty>.<host>.
-t title      Set title. (window's name).
-T term       Use term as $TERM for windows, rather than "screen".
-U            Tell screen to use UTF-8 encoding.
-v            Print "Screen version 4.01.00devel (GNU) 2-May-06".
-wipe [match] Do nothing, just clean up SockDir [on possible matches].
-x            Attach to a not detached screen. (Multi display mode).
-X            Execute <cmd> as a screen command in the specified session.

ctrl+ a, cakan membuat "jendela" baru di sesi layar aktif Anda. Anda dapat beralih di antara beberapa jendela (seperti ditunjukkan Ansgar) dengan ctrl+ a, nuntuk jendela berikutnya, dan ctrl+ a, puntuk jendela sebelumnya.

ctrl+ a, "akan memberi Anda daftar semua jendela terbuka Anda.

Lebih lanjut: https://superuser.com/questions/476709/quickly-switching-between-virtual-sessions-screen

Lukas
sumber
1

Jika Anda ingin skrip tetap ada setelah menutup terminal, opsi lain adalah menggunakan setsid:

setsid script.sh

Untuk informasi lebih lanjut tentang perbedaan antara nohup, disown, &dan setsid: Perbedaan antara nohup, memungkiri dan &

Gohu
sumber