Làm cách nào để lưu đầu ra của màn hình tách rời với tập lệnh?


7

Tôi có một tập lệnh Python test.pychỉ chứa : print('hi'). Tôi muốn chạy nó trong screenđể đầu ra của screenđược lưu bởi script.

Tôi sử dụng lệnh sau để chạy test.pytrong một screen, nó hoạt động tốt:

screen -dm bash -c 'python test.py'

Tuy nhiên, tôi vẫn chưa tìm được cách sử dụng scriptđể lưu đầu ra của screen. Tôi làm nó như thế nào?


Tôi đã thử không thành công:

  • script -c "screen -dm bash -c 'python test.py'" output.txt: tệp đầu ra output.txt không chứa hi, nhưng chỉ:

    Script started on Fri 26 Aug 2016 01:04:59 PM EDT
    
    Script done on Fri 26 Aug 2016 01:04:59 PM EDT
    

Tôi sử dụng Ubuntu 14.04.4 LTS x64.


Tài liệu:

https://www.gnu.org/software/screen/manual/screen.html :

-d -m: Màn hình bắt đầu ở chế độ tách rời. Điều này tạo ra một phiên mới nhưng không đính kèm. Điều này rất hữu ích cho các kịch bản khởi động hệ thống.

http://linux.about.com/l Library / cmd / blcmdl1_sh.htm :

-c chuỗi: Nếu có tùy chọn -c, thì các lệnh được đọc từ chuỗi. Nếu có các đối số sau chuỗi, chúng được gán cho các tham số vị trí, bắt đầu bằng $ 0.

trang người đàn ông của kịch bản:

-c, --command chạy lệnh thay vì shell tương tác

Câu trả lời:


6

Bạn nên làm theo cách khác, chạy scriptbên trong screen:

screen -dm bash -c 'script -c "python test.py" output.txt'

12

Bạn có thể sử dụng -Lcờ để tạo một screenlog.0tệp tự động

ví dụ

$ screen -dm -L sh -c 'echo hello'
$ cat screenlog.0 
hello

Nếu bạn có một phiên màn hình dài không được ghi lại thì bạn có thể bật đăng nhập sau

ví dụ

$ screen -dm -S test sh -c 'while [ 1 ]; do date; sleep 1; done'

Bây giờ chúng ta có thể bật đăng nhập

$ screen -S test -p 0 -X log

Cho phép một thời gian để vượt qua, vì việc ghi nhật ký được viết theo khối và ...

$ cat screenlog.0
Fri Aug 26 13:25:49 EDT 2016
Fri Aug 26 13:25:50 EDT 2016
Fri Aug 26 13:25:51 EDT 2016
Fri Aug 26 13:25:52 EDT 2016
Fri Aug 26 13:25:53 EDT 2016
Fri Aug 26 13:25:54 EDT 2016
Fri Aug 26 13:25:55 EDT 2016
Fri Aug 26 13:25:56 EDT 2016
Fri Aug 26 13:25:57 EDT 2016
Fri Aug 26 13:25:58 EDT 2016

2
Đây có phải là cách để lưu lịch sử đầu ra khỏi màn hình khi màn hình đã bắt đầu mà không có -L?
Nicolas

Cảm ơn câu trả lời. Tôi đã thử screen -dm -L bash -c 'python running_4ever.py' và xem nhật ký cũng như màn hình mới được tạo ra, tôi tự hỏi làm thế nào để chúng ta gắn vào nó hoặc giết nó? Tôi đã cố gắng screen -r <screen_id>nhưng không được.
Leo

@Leo điều này nghe có vẻ như bạn cần tạo một câu hỏi mới
Stephen Harris

@StephenHarris Chào Stephen, tôi đã tìm ra rồi. Tôi đã thử screen -dm -S <screen_name> -L bash -c "python running_4ever.py" và nó hoạt động, sau đó tôi chỉ sử dụng screen -XS <screen_name> quitđể giết nó. Cảm ơn vì đã trả lời
Leo

1

Một cách khác để làm điều đó là gắn màn hình trước:

screen -r <pid or name>

và sau đó:

Ctrl+ A,H

Nó sẽ bắt đầu đăng nhập vào screenlog.0


0

Có thể làm việc!

screen sh -c './some-script 2>&1 | tee mylog.log'
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.