Jalankan skrip di layar

25

Saya ingin menjalankan skrip bash di layar terpisah. Skrip memanggil program beberapa kali, yang masing-masingnya membutuhkan waktu terlalu lama untuk menunggu. Pikiran pertama saya adalah membuka layar dan kemudian memanggil skrip, tetapi tampaknya saya tidak bisa melepaskan ctrl-a dketika skrip sedang berjalan. Jadi saya melakukan riset dan menemukan instruksi ini untuk menggantikan shebang dengan yang berikut:

#!/usr/bin/screen -d -m -S screenName /bin/bash

Tapi itu juga tidak berhasil (opsinya tidak dikenali). Ada saran?

PS Itu terjadi pada saya sekarang yang screen -dmS name ./script.shmungkin akan bekerja untuk tujuan saya, tapi saya masih penasaran tentang bagaimana memasukkan ini ke dalam skrip. Terima kasih.

bongbang
sumber

Jawaban:

28

Baris shebang yang Anda lihat mungkin berfungsi pada beberapa varian unix, tetapi tidak di Linux. Garis shebang Linux terbatas: Anda hanya dapat memiliki satu opsi. Seluruh string -d -m -S screenName /bin/bashditeruskan sebagai opsi tunggal screen, alih-alih diteruskan sebagai kata yang berbeda.

Jika Anda ingin menjalankan skrip di dalam layar dan tidak dipusingkan dengan beberapa file atau mengutip, Anda dapat menjadikan skrip tersebut skrip shell yang memanggil layar jika belum ada di dalam layar.

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Ini bekerja dengan baik, untuk apa di "$0"sini?
Fabich
4
@Lordofdark Itulah nama skripnya. Script memanggil screenyang memanggil /bin/bashyang memanggil script lagi.
Gilles 'SO- stop being evil'
16

Menurut halaman manual layar:

  • screen -d -m Mulai layar dalam mode terpisah. Ini menciptakan sesi baru tetapi tidak melampirkannya. Ini berguna untuk skrip startup sistem.
  • -S sessionname Tetapkan nama sesi baru ke nama sesi.

Jadi ketika saya menjalankan perintah yang Anda berikan: screen -dmS name ./script.sh

Layar memulai jendela bernama nama dan secara otomatis menjalankan script.sh itu. Untuk kembali ke sana untuk melihat status, Anda cukup mengetik:screen -r test

Sekarang dengan Ubuntu 14.04, perintahnya sedikit berbeda. Mencoba:

screen -d -m -S test

Sekarang untuk menjalankan skrip, Anda harus membuka file konfigurasi untuk melakukannya:

sudo vim /etc/screenrc

Sesampai di sana, gulir ke bawah ke bawah dan Anda akan melihat:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

Ini adalah bagian di mana Anda perlu menambahkan nama skrip untuk menjalankan dan itu akan memungkinkan Anda untuk melakukan semua yang Anda butuhkan dari layar.

ryekayo
sumber
Entah bagaimana perintah itu ( screen -dmS ...) tidak bekerja untuk saya, meskipun itu benar-benar harus. Saya menjalankannya dan kemudian screen -lsdan tidak ada soket yang ditemukan. Pikiran?
bongbang
Distro apa yang Anda gunakan?
ryekayo
NAME = "Ubuntu" VERSION = "14.04.1 LTS, Trusty Tahr" Saya pikir. Ini mesin virtual.
bongbang
Beri aku sedikit karena aku hanya meninggalkan pekerjaan dan sakit mencoba menggunakan layar pada mesin saya yang juga ubuntu 14.04
ryekayo
@ Bangbang - versi layar apa yang Anda miliki?
slm
3

Ini agak lama tetapi salah satu dari sedikit utas yang dapat saya temukan untuk melakukan ini. Setelah bermain arount satu-satunya cara untuk menjalankan ini dalam mode terpisah dengan ubuntu 14. adalah

screen -d -m -t nameofwindow sh nameoflaunch.sh

Peluncuran akan menjadi bagian kedua di atas yang menampung perintah java dan versi server saat ini. Saya menjalankan vanilla.

ProjectEd
sumber