私たちの大学のサーバーでいくつかのテストを実行する必要があります。オフィスのデスクトップからSSHを介してサーバーにアクセスできます。週末に複数のテストを実行するサーバーでPythonスクリプトを起動したいと思います。
週末にはオフィスデスクトップがスタンバイ状態になるため、SSHセッションが終了してもそのプロセスはサーバー上で実行され続ける必要があります。
私は次の質問に記載されているとnohup
理解screen
しています。tmux
私が今やっていることは:
ssh username@server
tmux
python3 run_my_tests.py
->このスクリプトは一連のsubprocess.check_output
異なるスクリプトを実行し、それ自体でいくつかのJavaプロセスを起動します。- テストはうまくいきます。
- Ctrl+B、D を使用してセッションを分離します。
- これにより、
tmux attach
tmuxセッションが再び回復されます。まだエラーなくうまくいっています。。数分間確認を続けましたが、テストはうまくいきました。 - SSHセッションを閉じる
その後、SSH経由でサーバーにログインするとする実行中のセッションに再接続できtmux
、しかし、私が見るのはこれです:
Traceback (most recent call last):
File "run_my_examples.py", line 70, in <module>
File "run_my_examples.py", line 62, in run_cmd_aggr
File "run_my_examples.py", line 41, in run_cmd
File "/usr/lib64/python3.4/subprocess.py", line 537, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib64/python3.4/subprocess.py", line 858, in __init__
restore_signals, start_new_session)
File "/usr/lib64/python3.4/subprocess.py", line 1456, in _execute_child
raise child_exception_type(errno_num, err_msg)
PermissionError: [Errno 13] Permission denied
つまり、私が実行しているテストを生成するプロセス、SSHセッション終了直後、他のサブプロセスを作成できません。chmod
関連するすべてのファイルの権限を編集しましたが、何も変更されませんでした。
サーバーはログイン/権限にKerberosを使用し、サーバーはScientific Linux 7.2だと思います。
SSHセッションからログアウトするときに新しいプロセスを作成する権限を削除できますか?私ができることはありますか?私は始めなければなりません一部テスト中、どのくらいの時間とスペースがかかるのかわかりません...
- バージョン
systemd
は219です。 - ファイルシステムはAFSであり、それを使用してスクリプトが
fs listacl <name>
使用するディレクトリ/ファイルに対する権限があることを確認できます。
ベストアンサー1
ありがとうマーク・プロニック私は問題を識別し、解決できる。
問題は二人の相互作用だ。AFSファイルシステム認証を処理するサーバーとKerberosで使用されます。同じ問題がありますSOに関するこの質問。
デフォルトでは、サーバーにsshを接続すると、Kerberosはセッションに認証トークンを提供します。このトークンは、AFS ファイルシステムへのアクセスにも使用されます。 SSHセッションが閉じると、このトークンが削除され、実行中のプロセスがAFSのファイルにアクセスしようとすると、権限拒否エラーが発生し始めます。
この問題に対する解決策は、screen
/内で新しいウィンドウを起動しtmux
て次のコマンドを実行することです。
kinit && aklog
screen
その後、/から切り離しtmux
てSSHセッションを安全に閉じることができます。
上記のコマンドは新しいKerberosトークンを作成し、それをscreen
/tmux
セッションに関連付けるため、ssh接続が閉じられると初期トークンはキャンセルされますが、作成されたトークンは子プロセスによって使用されるため、権限は拒否されません。エラー。
結論として:
ssh username@server
tmux
- 引き続き実行するために必要なプロセスを開始します。
- 新しいウィンドウを作成Ctrl+B, C
kinit && aklog
- セッションから分離Ctrl+B, D
- SSHセッションを閉じる