(2022/12/17 21:20追記)
(2022/12/17 21:35修正)
(2022/12/17 23:10追記)
サーバを二つ用意して
Aサーバの{paramikoファイル}.pyを実行してBサーバの{実行ファイル}.pyを実行したいのですが、どうしても実行できません。
■構成イメージ
<Aサーバ>
A_appディレクトリ
→{paramikoファイル}.py
→{paramikoファイル}.sh
<Bサーバ>
B_appディレクトリ
→{実行ファイル}.py
→{実行ファイル}.sh
■前提
・A,Bともにubutuサーバ
・下記各コーディング内容
shell
1# ■{paramikoファイル}.sh 2source /home/xxx/.bashrc 3echo $環境変数名 4echo "アプリサーバ" 5/usr/bin/python3 /フルパス/{実行ファイル}.py 6echo "処理完了です"
python
1# ■<{paramikoファイル}.py> 2#別サーバのメイン処理実行 3def {メイン関数名}(data): 4 print(data) # テスト用メッセージ【X】 5 with paramiko.SSHClient() as client: 6 7 #logging.basicConfig() 8 #logging.getLogger("paramiko").setLevel(logging.DEBUG) 9 10 # 接続先情報(バッチサーバ) 11 HOSTNAME = {'IPアドレス'} 12 USERNAME = {'Iユーザー名'} 13 KEY_FILENAME = {'秘密鍵格納先'} 14 15 # 実行コマンド設定(★いくつかのコマンドをテスト用に実行) 16 print("BB") # テスト用メッセージ 【Y】 17 #LINUX_COMMAND = 'cd {{実行ファイル}.pyへのフルパス} ; python3 {実行ファイル}.py' # ケース1 18 #LINUX_COMMAND = '/usr/bin/python3 {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py' # ケース2 19 LINUX_COMMAND = 'bash {{実行ファイル}.shへのフルパス}/{実行ファイル}.sh' # ケース3 20 #LINUX_COMMAND = 'ls -l {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py' # ケース99 21 22 # SSH接続 23 client = paramiko.SSHClient() 24 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 25 26 # 公開鍵認証方式 27 client.connect(HOSTNAME, username=USERNAME, key_filename=KEY_FILENAME) 28 29 # コマンド実行 30 stdin, stdout, stderr = client.exec_command(LINUX_COMMAND) 31 32 for line in stdout: 33 print(line, end='') 34 35if __name__ == "__main__": 36 data = "バッチ実行" 37 {メイン関数名}(data)
shell
1#■<{実行ファイル}.sh> 2source /home/xxx/.bashrc 3echo $環境変数名 4echo "Webサーバ" 5/usr/bin/python3 /フルパス/{実行ファイル}.py --pyファイル実行用 6echo "処理完了です" --テスト用メッセージ【Z】 7done
python
1# ■<{実行ファイル}.py> 2##メインクラス 3if __name__ == '__main__': 4 5 touch_file = pathlib.Path( "./20221217test.txt" ) # 空ファイル作成 【★Bサーバで実行すると出力されるがAサーバからだと作成されない】 6 touch_file.touch() 7 8 print("print出力") # テスト用メッセージ【α】 9 logger = LogOutTest.LogOutTest() # ログファイル出力用関数 【★Bサーバで実行すると出力されるがAサーバからだと出力されない】 10 logger.info('処理中') 11 a = 1 12 b = 2 13 c = a + b 14 logger.info('変数a:' + str(a) + '|変数b:' + str(b) + '【処理結果:' + str(c) + '】') 15 logger.info('処理済')
■試行内容 【print,echo結果】
①AサーバからsshコマンドでBサーバに接続してpython3コマンド({実行ファイル}.py)実施【α】
②AサーバからsshコマンドでBサーバに接続してshコマンド({実行ファイル}.sh)実施【Z,α】
③Aサーバpython3コマンド({paramikoファイル}.py)実施 # ケース1,2【X,Y】
④Aサーバpython3コマンド({paramikoファイル}.py)実施 # ケース3【X,Y,Z】
環境設定か、コーディングが悪いのか、それともparamikoの仕様か
どうか調査しても特定できないため、ご助力いただけないでしょうか。

回答1件
あなたの回答
tips
プレビュー