test.py
다음만 포함하는 Python 스크립트가 있습니다 print('hi')
. screen
a 의 출력이 screen
에 의해 저장 되도록 a 에서 실행하고 싶습니다 script
.
test.py
다음 명령을 사용하여 a에서 실행했는데 screen
정상적으로 작동합니다.
screen -dm bash -c 'python test.py'
script
그런데 저장 방법을 찾지 못했습니다 screen
. 어떻게 해야 하나요?
내 시도가 실패했습니다:
script -c "screen -dm bash -c 'python test.py'" output.txt
:출력 파일 output.txt에는 가 포함되어 있지 않지만hi
다음만 포함됩니다.Script started on Fri 26 Aug 2016 01:04:59 PM EDT Script done on Fri 26 Aug 2016 01:04:59 PM EDT
저는 Ubuntu 14.04.4 LTS x64를 사용하고 있습니다.
문서:
https://www.gnu.org/software/screen/manual/screen.html:
-d -m: 분리 모드의 시작 화면입니다. 그러면 새 세션이 생성되지만 연결되지는 않습니다. 이는 시스템 시작 스크립트에 유용합니다.
http://linux.about.com/library/cmd/blcmdl1_sh.htm:
-c 문자열: -c 옵션이 있으면 문자열에서 명령을 읽습니다. 문자열 뒤에 매개변수가 있으면 $0부터 시작하는 위치 매개변수에 할당됩니다.
스크립트의 매뉴얼 페이지:
-c, --command 대화형 셸 대신 명령 실행
답변1
이 플래그를 사용하여 자동 파일을 -L
만들 수 있습니다screenlog.0
예를 들어
$ screen -dm -L sh -c 'echo hello'
$ cat screenlog.0
hello
기록되지 않고 오랫동안 실행되는 화면 세션이 있는 경우 나중에 기록을 켤 수 있습니다.
예를 들어
$ screen -dm -S test sh -c 'while [ 1 ]; do date; sleep 1; done'
이제 로깅을 켤 수 있습니다
$ screen -S test -p 0 -X log
로그 기록이 덩어리로 기록되니까 잠시만 기다려주세요...
$ 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
역순으로 수행해야 하며 다음 script
을 실행해야 합니다 screen
.
screen -dm bash -c 'script -c "python test.py" output.txt'
답변3
또 다른 방법은 화면을 먼저 연결하는 것입니다.
screen -r <pid or name>
그런 다음:
Ctrl+ A,H
로그인이 시작됩니다screenlog.0
답변4
일할 수있다!
screen sh -c './some-script 2>&1 | tee mylog.log'