GNU/Linux >> Belajar Linux >  >> Linux

Cegah Layar Gnu Dari Mengakhiri Sesi Setelah Script yang Dieksekusi Berakhir?

Saya mencoba memaksa layar GNU untuk membuat terminal "virtual", tanpa melampirkannya, menjalankan skrip di dalam dan TIDAK mengakhiri sesi setelah skrip berakhir.

Saya mencoba banyak kombinasi, termasuk:

screen -dmS udplistener /share/Sys/autorun/start_udp_listeners.sh

atau

screen -S udplistener -X /share/Sys/autorun/start_udp_listeners.sh

dan tidak satupun dari mereka bekerja. Saya mendapatkan sesi tanpa skrip yang dieksekusi, skrip dijalankan, tetapi sesi dihentikan setelah selesai atau saya mendapatkan kesalahan “Tidak ada sesi layar yang ditemukan”.

Apa yang pada dasarnya saya coba lakukan adalah menjalankan pendengar UDP, ditulis dalam PHP dan membuatnya bekerja dalam loop tak terbatas (jangan putus mendengarkan). Ya — Saya dapat menjalankan skrip PHP dengan & pada akhirnya, memaksa PHP CLI untuk dijalankan sebagai daemon. Masalahnya adalah, saya menggunakan sepotong sampah yang disebut server (QNAP — jangan pernah membeli sampah ini!) yang tampaknya mengabaikan hal ini. Segera setelah saya keluar dari sesi SSH, skrip berhenti.

Jadi screen tampaknya menjadi satu-satunya pilihan. Tapi saya tidak mengerti, mengapa sesi berakhir setelah perintah atau skrip yang dieksekusi berakhir?

EDIT :Saya juga sudah mencoba contoh yang ditemukan di Internet:

screen -dmS name
screen -S name -p windowname -X stuff 'mc
'

Tidak ada kekurangan! Setelah melampirkannya (screen -R name ) Saya melihat bahwa Komandan Tengah Malam BELUM dieksekusi. Meskipun penulis contoh mengatakan, itu akan terjadi.

Jawaban yang Diterima:

Agar layar tetap sibuk setelah skrip selesai, biarkan sesuatu terus berjalan di jendela. Pilihan paling sederhana untuk "sesuatu" itu mungkin adalah shell interaktif. Inilah salah satu cara untuk melakukannya (dengan asumsi bash sebagai pilihan shell interaktif):

screen -dmS session_name sh -c '/share/Sys/autorun/start_udp_listeners.sh; exec bash'
  • -dm :memulai layar dalam mode terpisah
  • -S :menyetel nama sesi untuk layar untuk pengambilan yang lebih mudah nanti
  • sh -c '...' :alih-alih menjalankan skrip Anda, yang akan dihentikan, gunakan sh -c untuk menjalankan banyak perintah
  • exec bash :setelah skrip berakhir, sh dari atas akan beralih ke shell interaktif (bash ), yang tidak boleh keluar sampai sesuatu yang eksternal menghentikannya. Ini akan menjaga screen buka selama bash instance masih hidup.

Linux
  1. Mengirim Input Ke Sesi Layar Dari Luar?

  2. Layar Gnu:Cetak Sesi Terpisah Ke Stdout?

  3. Tangkapan Layar X Dari Tty?

  1. Cegah Sigint Mencapai Proses Anak?

  2. Bunuh sesi layar terpisah

  3. Skrip Bash:Menggunakan perintah skrip dari skrip bash untuk mencatat sesi

  1. Cegah ssh agar tidak memecah parameter skrip Shell

  2. Cara mengeksekusi skrip saat sesi xfce berakhir

  3. Bagaimana cara mencegah Ubuntu mematikan monitor saya?