Bagaimana cara menjalankan perintah di layar dan melepaskan?


75

Bagaimana saya bisa mendapatkan layar untuk menjalankan perintah dan kemudian melepaskan (Yaitu, secara otomatis dalam satu skrip tanpa input lebih lanjut di luar memulai skrip)? misalnya saya menjalankan myscript.sh dan secara otomatis memulai sesi layar, mengeksekusi perintah, kemudian melepaskan.

Jawaban:


114

Ini mudah:

screen -d -m yourcommand

4
tidak ada dadu. layar -d -m perintah, layar -list mengatakan tidak ada soket, layar -r tidak ada sesi
darkfeline

1
Entah bagaimana perintah Anda tidak ditemukan, atau tidak berfungsi dengan benar di lingkungan layar yang dibuat secara otomatis. Coba lakukan saja screen yourcommandtanpa -ddan -mdan lihat bagaimana hasilnya dulu.
Alan Curry

Anda benar. Layar berakhir ketika perintah selesai, bertentangan dengan harapan saya. Tetapi jawaban Anda berhasil.
darkfeline

3
Anda dapat mengubahnya dengan mengaktifkan zombieopsi di layar. Masukan zombie xydalam Anda ~/.screenrc. Seharusnya juga dimungkinkan untuk mengaktifkannya hanya untuk satu sesi, meletakkan zombie xyfile lain dan menggunakan -c filetetapi untuk beberapa alasan itu tidak berfungsi ketika saya mencobanya. Atau cukup gunakansh -c 'yourcommand;while :;do sleep 9999; done'
Alan Curry

@AlanCurry, Tidak, ini juga tidak berfungsi untuk saya, meskipun perintahnya berjalan dengan sempurna (dan membutuhkan beberapa jam) ketika dijalankan di layar secara manual.
Cerin

47

Untuk menjalankan satu perintah di layar dan melepaskan, Anda dapat mencoba:

screen -dm sleep 10

Untuk menjalankan banyak perintah, cobalah:

screen -dm bash -c "sleep 10; myscript.sh"

Harap dicatat bahwa ketika sebuah program berakhir, layar (per default) membunuh jendela yang berisi itu.

Jika Anda tidak ingin sesi Anda terbunuh setelah skrip selesai, tambahkan exec shdi akhir, misalnya:

screen -dm bash -c 'sleep 5; exec sh'

Untuk membuat daftar semua sesi Anda, cobalah:

screen -list

Terkait: Mulai layar Unix, Jalankan perintah, Lepaskan .


2
Ini bekerja untuk saya di Ubuntu 16.04. Selain nama sesi Anda sehingga Anda dapat kembali ke sini kelak, tambahkan -S sessionname: screen -dmS MyLongRunningScript bash -c "...".
Dan Dascalescu

16

Untuk memulai sesi baru di latar belakang dengan nama 'mengantuk'

screen -S sleepy -dm sleep 60

Untuk membunuh sesi 'mengantuk'

screen -S sleepy -X quit      

mengapa itu tidak berfungsi screen -S sleepy -dm "cd myfolder;sleep 60"?
Toolkit

@Toolkit Masalahnya adalah Anda memiliki perintah dalam tanda kutip sehingga diperlakukan sebagai satu perintah besar. Jelas kita tidak bisa mengeluarkannya dari tanda kutip karena titik koma. Untuk mengatasi ini, jalankan perintah seperti ini: layar -S mengantuk -dm bash -c "cd myfolder; sleep 60"
Jason Thompson

3
screen -dmS screen_session_name bash -c 'echo "doing stuff"; exec bash'

0

itu terjadi pada saya ketika saya menekan control c (sig int) untuk keluar dari program saya. keluar dari semua bash. jadi saya menemukan ini untuk menangkap SIGINT. dan mencegah keluar dari bash terakhir. (perlu mengetik keluar untuk keluar)

screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"


example:

screen -dmS "status_updates" bash -c "trap 'echo gotsigint' INT; cd /opt/status_update ; forever index.js ;  bash"

Saya merasa berguna untuk menggunakan cron untuk menjalankan program nodejs saat startup. dan untuk menjalankan layar saat boot. di cron ada sintaks acara acara khusus @reboot

to edit cron, execute:
crontab -e

then type
@reboot screen -dmS "screenNameHere" bash -c "trap 'echo gotsigint' INT; cd /mydir ; my_command_here;  bash"
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.