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'