Saya sedang mengerjakan mengotomatiskan rutinitas perawatan yang melibatkan memulai dan menghentikan skrip yang berjalan dalam sesi layar. Pendekatan saya adalah untuk mematikan sesi layar, dan kemudian restart dan jalankan perintah dari dalam skrip menggunakan kemampuan untuk membuat layar dan meneruskan perintah tanpa harus melampirkan ke layar.
Namun, saya mengalami kesulitan dengan ini. Saya dapat membuat layar dengan benar tanpa harus menggunakan screen -d -m -S screen_name
. Namun, jika saya menjalankan perintah berdasarkan:
screen -S screen_name-X stuff "command 1"'echo -ne '\015''"command 2"'echo -ne '\015''
dengan echo -ne '\ 015' dibungkus dengan backticks daripada tanda kutip tunggal. Ini untuk mensimulasikan pengguna menekan tombol enter ketika perintah yang saya gunakan pindah ke direktori dan menjalankan skrip yang terletak di sana. Perintah ini berfungsi, tetapi hanya jika layar telah dilampirkan setelah dibuat. Ketika saya mencoba untuk mengotomatiskan proses membuat layar dan menjalankan perintah di dalamnya, saya ingin menghindari melampirkan dan melepaskan dalam skrip. Saya akan mencoba saran untuk membuat skrip shell yang berisi perintah yang perlu saya jalankan di dalam layar dan mengedit sesuai dengan hasil saya.
Apakah ada cara untuk membuat layar dan menjalankan perintah di dalam layar baik dalam satu perintah, atau tanpa harus melampirkan ke layar setelah membuat tetapi sebelum pelaksanaan perintah?
Terima kasih sebelumnya.
** Pembaruan - setelah mencoba saran untuk menempatkan perintah yang saya perlu jalankan dalam skrip shell, saya telah berhasil membuat layar dan menjalankan perintah dari dalam layar, tetapi saya mendapatkan perilaku bahwa ketika skrip berhenti berjalan layar ditutup juga. Ini seharusnya tidak menjadi masalah karena skrip adalah skrip logging yang hanya boleh berhenti dengan sepengetahuan admin sys atau melalui skrip yang saya coba kembangkan, namun akan lebih baik untuk memiliki pengaturan layar sedemikian rupa sehingga layar tidak hilang jika skrip dihentikan. Apakah mungkin untuk mencapai perilaku ini? **
sumber
.screenrc
yang berisi bariszombie kr
, yang akan membuat jendela jadi terbuka, dan Anda bisa menekank
untuk menutup winodw, ataur
untuk menjalankan perintah di jendela lagi. Saya memiliki ini untuk .screenrc default saya.Jawaban:
Saya pikir Anda mungkin mengalami beberapa masalah.
Jika perintah selesai sebelum Anda memasang kembali, layar akan hilang. Anda dapat memperagakan ini dengan menggunakan:
Ini akan menjalankan
ls -l
perintah, tetapiscreen -list
tidak akan menampilkannya karena proses layar telah berakhir.Saya juga tidak tahu apa yang Anda coba lakukan dengan barang-barang ini. Mungkin memperbarui pertanyaan Anda akan membantu, karena apa yang saya pikir Anda coba lakukan adalah menjalankan beberapa perintah dalam sesi layar. Ini harus sesederhana:
Jika ini banyak digunakan, mungkin Anda harus membuat skrip shell yang menjalankan hanya perintah ini, kemudian gunakan yang lebih sederhana:
sumber
screen -d -m ssh
akan melepaskan pada kata sandi prompt sebelum sesi dibuat.screen -list
. Juga, ini tidak memberi nama layar seperti yang coba dilakukan OP.screen -d -m python EventGenerator.py
, yang bekerja dengan baikbash -c "commands"
bukanbash "commands"
Mulai layar terpisah
Jalankan perintah di layar terpisah yang dibuat sebelumnya
Ya, Anda perlu mengetikkan simbol enter untuk mengirimkan perintah atau kalau tidak, itu hanya akan menambahkan string ke layar.
http://osdir.com/ml/gnu.screen/2003-09/msg00029.html
sumber
stuff
sebenarnya adalah perintah yang menyalin-menempelkan perintah lain ke dalam sesi layar: stuff [string] Stuff string string dalam buffer input dari jendela saat ini. Ini seperti perintah "tempel" tetapi dengan overhead yang lebih sedikit. Tanpa parameter, layar akan meminta string untuk diisi. Anda tidak dapat menempelkan buffer besar dengan perintah "stuff". Ini paling berguna untuk binding utama. Lihat juga "bindkey". [dikutip dari theterminallife.com/sending-commands-into-a-screen-session/]Saya pernah mengalami masalah ini sebelumnya, itu adalah bug dengan implementasi cygwin.
Apa yang saya lakukan adalah membuat ".screenrc_detaching" hanya memiliki perintah berikut
dan kemudian mulai layar dengan
Kemudian Anda memiliki sesi layar Anda dan sudah terpasang dan terlepas dan Anda baik untuk memompa perintah ke sana.
Mudah ! : P
sumber
Ini berhasil bagi saya, tanpa
-c
tidak berhasilscreen -d -m bash -c "command1; command2; command3"
sumber
Cara copy'npaste untuk menguji jawaban sebelumnya adalah:
Hasil yang diharapkan harus serupa dengan:
(Itu berarti tidak ada sesi layar yang sebelumnya dibuat)
(Ini waktu yang dihabiskan untuk membuat layar dan melepaskannya. Hampir seketika.)
(Output ini menampilkan sesi layar yang tersedia. Dibuat atas perintah terakhir.)
(Ini
cat
menunjukkan nama host dijalankan di dalam layar gnu)sumber
sumber