2010-12-14 27 views
5

Bất kỳ phiên nào mà tôi bắt đầu bằng "-d -m" không chấp nhận lệnh "-X stuff [...]" trừ khi tôi đã đính kèm vào màn hình ít nhất một lần. Không có thông báo lỗi, các lệnh không được thông qua.Làm cách nào để gửi các lệnh công cụ đến màn hình bắt đầu tách rời?

Vấn đề là tôi bắt đầu phiên từ một công việc định kỳ và không thể đính kèm vào màn hình từ bên trong cron.

bước để lặp lại

$ screen -m -d -S mydaemon bash 
$ screen -S mydaemon -X stuff "`printf "exit\\r"`" 
$ screen -ls 
     32456.mydaemon (Detached) 
$ screen -r -S mydaemon 
$ ^a d 
$ screen -S mydaemon -X stuff "`printf "exit\\r"`" 
$ screen -ls 
No Sockets found in /var/run/screen/S-user 

^a d chỉ nhấn Ctrl + a sau đó nhấn d.

phiên bản

CentOS release 5.5 (Final) 
Screen version 4.00.03 (FAU) 23-Oct-06 

Trả lời

8

Edit: Câu trả lời tốt nhất cho câu hỏi này là this other SO answer. Tôi để lại giải pháp kludgey của tôi ở đây, dù sao, trong trường hợp nó truyền cảm hứng cho một giải pháp cho một vấn đề tương tự.


Sự chỉnh sửa có là sử dụng một thứ hai, đang chạy và phiên màn hình tách ra để bắt đầu phiên màn hình mà bạn muốn gửi "công cụ" lệnh trong chế độ đính kèm, và sau đó gửi phiên màn hình một cửa sổ mới lệnh và sau đó lệnh công cụ.

$ screen -dmS spawner 
$ screen -S spawner -X screen screen -dR mydaemon 
$ sleep 1 # may be necessary 
$ screen -S mydaemon -X detach 
$ screen -S mydaemon -X stuff "whatever" 

(Lưu ý: các "màn hình" tăng gấp đôi là không một lỗi đánh máy!) Bạn vẫn còn lại với một phiên màn hình unstuffable (spawner) nhưng nếu các nguồn lực phải mất rất quan trọng, bạn có thể luôn luôn chỉ sử dụng "tiêu diệt -TERM ... "hoặc ilk của nó để chấm dứt nó (hoặc nó tự động thoát sau một khoảng thời gian nhất định bằng cách bắt đầu nó với một cái gì đó như

hoặc tương tự).

+0

Cảm ơn bạn rất nhiều, bạn thật tuyệt vời! –

+1

Cảm ơn sự khích lệ. cái đó Tôi đã phải thêm một giấc ngủ ngắn sau khi tạo phiên màn hình và phân đoạn của nó thông qua-X, để ngăn chặn điều kiện chủng tộc. Câu trả lời đã được chỉnh sửa để phản ánh điều đó. –

0

Bạn đã xem là sử dụng tmux để thay thế? Nó phù hợp hơn cho các tác vụ không tương tác.

+0

tôi hiện không có tmux cài đặt nhưng tôi có thể nhìn vào nó. Có một hướng dẫn hoặc có thể bạn cung cấp một ví dụ cho những gì tôi cần? –

+0

'man tmux' khá nhiều bao gồm tất cả mọi thứ, nhưng điều này nên được khá nhiều giống với những gì bạn muốn: http://blog.hawkhost.com/2010/07/02/tmux-% E2% 80% 93-the-thiết bị đầu cuối-multiplexer-part-2/# tmux-shell-scripting –

-1

Sử dụng tệp .screenrc, bạn có thể đặt mọi thứ để bắt đầu;

screen -t <title> <window position> <command> 

Vì vậy, nếu bạn muốn bắt đầu top trong cửa sổ 7, bạn muốn làm

screen -t window7top 7 top 
+0

Phản hồi của bạn không áp dụng được –

0

Cảm ơn Ron Kaminsky.

tôi tìm thấy một cách khác để giết màn hình 'spawner'

$ screen -dmS spawner 
    $ screen -S spawner -X screen screen -dR mydaemon 
    $ sleep 1 # may be necessary 
    $ screen -S mydaemon -X detach 

và thêm bên dưới dòng

$ screen -S mydaemon -X screen screen -S spawner -dR 
    $ sleep 1 # may be necessary 
    $ screen -S spawner -X detach 
    $ screen -S spawner -X kill 
+0

Dù sao, tôi không thể thêm bình luận cho các chàng trai khác. chuyện gì xảy ra với mình thế này. :( –

0

màn hình -d -m/bin/bash "thử nghiệm.sh"

màn hình (tách ra) (di động) (vỏ) 'gì để thực hiện'

$ screen -d -m /bin/bash "test.sh" 
$ screen -li 
There is a screen on: 
     8540..Satelite (10/17/2013 04:53:22 AM)  (Detached) 
1 Socket in /var/run/screen/S-matt. 
Các vấn đề liên quan