Tại sao màn hình dường như không làm gì với các lệnh được truyền bằng -X?


7

Tôi đã cố gắng thiết lập hệ thống sao lưu tự động cho máy chủ minecraft và tôi gặp sự cố với màn hình, cụ thể là khi sử dụng 'screen -r sessionname -X "/ var / minecraft / somebatchfile"', không có gì xảy ra.

Dòng quy trình của tôi có phần như thế này vào lúc này:

screen -m -d -S minecraft /var/minecraft/bin/server_nogui.sh

Điều này khởi động máy chủ minecraft mà không gặp rắc rối nào. Tuy nhiên, vấn đề là ngay cả những phần tiếp theo đơn giản như thế này cũng thất bại:

screen -r minecraft -X "stop"

Tôi không nhận được thông báo lỗi hoặc thông báo thành công và máy chủ không thực sự ngắt kết nối máy khách và tắt, giống như vậy. Tôi cho rằng tôi đang làm gì đó sai, nhưng tôi không biết gì. Có một số sai lầm rõ ràng tôi đang làm? Tôi đã đọc trang người đàn ông một chút nhưng tôi không có may mắn tìm ra nó.

Câu trả lời:


6

Bạn phải cung cấp cho tham số -Xmột screenlệnh, tôi nghĩ rằng bạn muốn "nhét" lệnh minecraft-server vào screenphiên.

screen -r minecraft -p 0 -X stuff "stop $(printf '\r')"

Các printfgửi một trở về vận chuyển, vì vậy lệnh "dừng" được thực thi. -p 0đảm bảo các ký tự được gửi đến cửa sổ Màn hình ban đầu.

Để gửi nó qua, sshbạn phải đặt lệnh vào " "(bạn cũng có thể sử dụng ` `, nhưng điều đó sẽ không cho phép bạn thực hiện thay thế lệnh).

ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff "even other_server_name is getting in on the action\! $(echo -ne '\r')""

Coi chừng đó !là một từ dành riêng, bạn phải thoát khỏi nó.

Cũng có thể bao gồm một dòng người dùng được tạo vào lệnh để thực thi nó:

ssh -t -i ~/.ssh/id_dsa server_user@server_address "screen -r minecraft -X stuff 'even other_server_name is getting in on the action!
'"

Chạy trốn !không cần thiết ở đây.


Điều đó hoạt động rất tốt, nhưng tất nhiên bây giờ tôi dường như không thể chạy nó thông qua ssh / dòng lệnh ssh -t -i ~/.ssh/id_dsa server_user@server_address screen -r minecraft -X stuff "even other_server_name is getting in on the action! $(echo -ne '\r')" Tôi thực sự không tốt với unix, thật không may: /
Sukasa

1

Như chúng tôi đã khám phá trong câu hỏi tương tự này , màn hình có vấn đề với việc gửi khóa đến các phiên chưa bao giờ được đính kèm. Nếu bạn đã từng đính kèm, khung cửa sổ mặc định được đặt thành 0, nếu không, nó sẽ âm thầm thất bại vì tổ hợp phím không đi đến cửa sổ. Bạn có thể tránh điều này bằng cách thêm một -p 0đối số vào lệnh màn hình của bạn.

Thay vào đó, bạn có thể sử dụng cách cư xử tốt hơn nhiều tmuxnhư thế này :

tmux new-session -d -n minecraft /var/minecraft/bin/server_nogui.sh

Sau đó gửi máy chủ minecraft lệnh dừng như thế này:

tmux send-keys -t minecraft "stop^M"

Lưu ý rằng chuỗi ^ M ở trên là một đại diện trực quan của một mục nhập thực. Bạn có thể tạo lệnh này trên lệnh như bằng cách nhấn Ctrl+ v Enter. Điều này dễ hơn gửi trả lại vận chuyển bằng cách sử dụng câu lệnh echo trong câu trả lời của wag .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.