Jalankan skrip Bash di latar belakang dan keluar dari terminal


Jawaban:


45

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

nohup cmd &

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


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.


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 &

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.