大学のサーバーでいくつかのテストを実行する必要があります。オフィスのデスクトップからサーバーにsshアクセスできます。週末にいくつかのテストを実行するサーバーでpythonスクリプトを起動したいと思います。
オフィスのデスクトップは週末の間スタンバイ状態になるため、SSHセッションが終了した場合でも、サーバー上でプロセスが引き続き実行されることが不可欠です。
次のような質問で説明されているように、Nohup
とscreen
とtmux
について知っています。
私は今何をしていますか:
ssh username@server
tmux
python3 run_my_tests.py
->このスクリプトは、それ自体がいくつかのJavaプロセスを起動する他のスクリプトのsubprocess.check_output
の束を実行します。tmux attach
を実行すると、まだ正常に実行されているtmuxセッションを再取得しますが、エラーはまったくありません。私はこれを数分間チェックし続け、テストは正常に実行されました。この後、SSH経由でサーバーにログインすると、doは実行中の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を使用していると思います。サーバーはScientificLinux7.2です。
Sshセッションからログオフすると、新しいプロセスを生成する権限が削除される可能性はありますか?何かできることはありますか?私はseveralテストを起動する必要があります。テストにどれくらいの時間やスペースがかかるかはわかりません...
systemd
のバージョンは219ですfs listacl <name>
を使用しています。スクリプトで使用されるディレクトリ/ファイルに対するアクセス許可があることを確認できます。おかげで Mark Plotnick 問題を特定して修正することができました。
問題は、サーバーが使用する AFSファイルシステム と、認証を処理するKerberosの間の相互作用です。同じ問題が SOに関するこの質問 でも取り上げられました。
基本的に何が起こっているのかというと、サーバーにSSHで接続すると、Kerberosがセッションに認証トークンを与えます。このトークンは、AFSファイルシステムへのアクセスにも使用されます。 SSHセッションを閉じると、このトークンは破棄され、実行中のプロセスは、AFS上のファイルにアクセスしようとすると、アクセス許可拒否エラーの取得を開始します。
これを修正する方法は、screen
/tmux
内で新しいウィンドウを開始し、次のコマンドを起動することです。
kinit && aklog
その後、screen
/tmux
からデタッチして、sshセッションを安全に閉じます。
上記のコマンドは、新しいKerberosトークンを作成し、それらをscreen
/tmux
セッションに関連付けます。このようにして、ssh接続が閉じられると、最初のトークンは取り消されますが、サブプロセスは作成したトークンを使用するようになります。許可拒否エラーは発生しません。
要約する:
ssh username@server
tmux
kinit && aklog
サーバーでscreen ssh $USER@$HOSTNAME
を試してください。
kinit && aklog
ソリューションは私にとってはうまくいきませんでしたが、この "sshception"ソリューションを見つけました。画面内で、同じマシンにsshを実行し、そのsshセッションでプログラムを実行します。画面が許可を失った場合でも、内部のsshセッションは開いたままで認証されます。
このようなエラーは、おそらくファイルシステムのアクセス許可に関連しています。サーバー側のsyslogイベントを確認できますか?
たぶんあなたはあなたの環境にログインしたままでいる必要があるでしょう ここ を見てくださいLinuxファイルのパーミッションと問題についてもっと知るために、それは役立つかもしれません。