Jalankan skrip Bash di latar belakang dan keluar dari terminal

19

Apakah mungkin untuk meluncurkan perintah atau terminal keluar skrip Bash dan TIDAK mengganggu perintah?

Solusi saya adalah menjalankan cron pada waktu tertentu, tetapi saya yakin ada sesuatu yang lebih mudah.

Peter Mortensen
sumber

Jawaban:

45

Untuk menghindari penyebaran sinyal keluar ke proses anak dari terminal dan shell, jalankan perintah dengan nohup, yaitu:

nohup cmd &
Thor
sumber
1
Ini jawaban yang benar. Tanpa nohup, proses yang dimulai masih dianggap sebagai "anak" dari proses terminal dan dengan demikian diakhiri jika terminal ditutup.
Izzy
3
cmd & disownberfungsi juga, karena &diperlakukan seperti ;pemisah perintah. Perintah disown menghapus koneksi antara sesi bash shell dan perintah di latar belakang.
lornix
2
zsh memiliki singkatan untuk ini: cmd &|.
Thor
Agar ini berfungsi, saya harus mengubah preferensi di Terminal.app. Di bawah Profil, pilih profil aktif Anda, lalu Shell> Ketika shell keluar> Tutup jika shell keluar dengan bersih
antoine
6

Menggunakan screen:

screen -S <session name> -d -m <your command>

setelah itu Anda dapat keluar dari terminal, Anda juga dapat menghubungkan kembali dengan:

screen -r <session name>

Info lebih lanjut: referensi

Bruce
sumber
4

Jika Anda ingin menjalankan perintah atau file spesifik setiap detik di latar belakang setelah keluar dari terminal, Anda dapat mencoba hal kecil yang mudah ini;

nohup watch -n5 'bash script.sh' &

Itu akan menjalankan scipt.sh setiap 5 detik.

jamietelin
sumber
1
"nohup" sudah dicakup oleh jawaban yang diterima. Dan saya cukup yakin penanya menyebutkan cron karena mereka menggunakannya untuk mengatakan "Jalankan perintah ini beberapa detik di masa depan", bukan untuk menjalankannya secara berkala.
David Richerby
1
Jawaban saya tidak memperburuk keadaan. Jangan melihat titik suara bawah. Neural sudah cukup.
jamietelin
3

Letakkan karakter "&" di bawah perintah Anda.

misalnya:

/home/your/script.sh &
Flinth
sumber
7
dalam hal ini, ketika terminal ditutup, demikian juga proses dimulai oleh /home/your/script.sh- karena tidak terlepas dari "induknya", tetapi hanya "latar belakang". Gunakan nohupuntuk melepaskannya nyata.
Izzy
Buruk saya, saya tidak tahu tentang itu, tetapi ketika saya menguji pada Debian saya, perintah terus mengeksekusi setelah menutup shell yang meluncurkannya: /
Flinth
1
Saya tidak yakin di mana tepatnya proses latar belakang dilampirkan dan kapan. Tetapi jika Anda misalnya masuk ke mesin jarak jauh, itu pasti dihentikan segera setelah Anda logout (kecuali jika itu daemonized sendiri). Jadi untuk 100% yakin, Anda lebih suka menggunakan nohup- yang juga mencatat semua (sekarang tidak terlihat) output ke file yang disebut nohup.outterletak di direktori tempat Anda memulai perintah.
Izzy
Oke, terima kasih atas penjelasan Anda ^^
Flinth
Jawaban ini mungkin berfungsi baik bila dikombinasikan dengan jobsperintah. Cukup sering saya ingin dapat kembali ke proses shell setelah melatarbelakanginya.
djangofan