質問編集履歴

3

環境変数の取得(source)のためにシェルの追加({paramikoファイル}.sh)

2022/12/17 14:10

投稿

aluter
aluter

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,6 @@
1
1
  (2022/12/17 21:20追記)
2
2
  (2022/12/17 21:35修正)
3
+ (2022/12/17 23:10追記)
3
4
 
4
5
 
5
6
  サーバを二つ用意して
@@ -9,6 +10,7 @@
9
10
  <Aサーバ>
10
11
  A_appディレクトリ
11
12
  →{paramikoファイル}.py
13
+ →{paramikoファイル}.sh
12
14
  <Bサーバ>
13
15
  B_appディレクトリ
14
16
  →{実行ファイル}.py
@@ -17,6 +19,15 @@
17
19
  ■前提
18
20
  ・A,Bともにubutuサーバ
19
21
  ・下記各コーディング内容
22
+
23
+ ```shell
24
+ # ■{paramikoファイル}.sh
25
+ source /home/xxx/.bashrc
26
+ echo $環境変数名
27
+ echo "アプリサーバ"
28
+ /usr/bin/python3 /フルパス/{実行ファイル}.py
29
+ echo "処理完了です"
30
+ ```
20
31
 
21
32
  ```python
22
33
  # ■<{paramikoファイル}.py>
@@ -59,10 +70,11 @@
59
70
  ```
60
71
  ```shell
61
72
  #■<{実行ファイル}.sh>
73
+ source /home/xxx/.bashrc
62
- ARRAY=(1 2)
74
+ echo $環境変数名
63
- for num in ${ARRAY[@]}; do
75
+ echo "Webサーバ"
64
76
  /usr/bin/python3 /フルパス/{実行ファイル}.py --pyファイル実行用
65
- echo $num"回目のループです" --テスト用メッセージ【Z】
77
+ echo "処理完了です" --テスト用メッセージ【Z】
66
78
  done
67
79
  ```
68
80
 

2

全体内容を修正(不明瞭部分を修正) ※■試行内容に試行内容と【print,echo結果】を記載

2022/12/17 12:42

投稿

aluter
aluter

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,7 @@
1
+ (2022/12/17 21:20追記)
2
+ (2022/12/17 21:35修正)
3
+
4
+
1
5
  サーバを二つ用意して
2
6
  Aサーバの{paramikoファイル}.pyを実行してBサーバの{実行ファイル}.pyを実行したいのですが、どうしても実行できません。
3
7
 
@@ -8,53 +12,17 @@
8
12
  <Bサーバ>
9
13
  B_appディレクトリ
10
14
  →{実行ファイル}.py
15
+ →{実行ファイル}.sh
11
16
 
12
17
  ■前提
13
18
  ・A,Bともにubutuサーバ
14
- ・{実行ファイル}.pyは実行結果を出力するようにしてます。
15
- ************(抜粋)
19
+ ・下記各コーディング内容
16
- for line in stdout:
17
- print(line, end='')
18
- ************(/)
19
20
 
20
- ■NGコマンド(一部抜粋)
21
- <{paramikoファイル}.py>
22
- LINUX_COMMAND = 'python3 ~/B_app/{実行ファイル}.py'
23
- ~~~
24
- stdin, stdout, stderr = client.exec_command(LINUX_COMMAND)
25
-
26
- 別コマンドで実行したらうまくいくので、ssh疎通はうまくいっているようです。
27
-
28
- ■OKコマンド(一部抜粋) 
29
- <{paramikoファイル}.py>
30
- ・LINUX_COMMAND = 'ls -l'
31
- ~~~
32
- stdin, stdout, stderr = client.exec_command(LINUX_COMMAND)
33
-
34
- また、下記を試してparamikoからの実行だけが上手くいっておりません。
35
-
36
- ■試行内容
37
- ①AサーバからsshコマンドでBサーバに接続してpython3コマンド実施【成功】
38
- ②新しくshファイルを作成して{実行ファイル}.pyを実行するようにした【失敗】
39
- ※Bサーバからコマンド実行で{実行ファイル}.pyが実行できていることは確認済み
40
- 〇構成イメージ
41
- <Aサーバ>
42
- A_appディレクトリ
43
- →{paramikoファイル}.py
44
- <Bサーバ>
45
- B_appディレクトリ
46
- →{実行ファイル}.py
47
- →{実行ファイル}.sh
48
-
49
- 環境設定か、コーディングが悪いのか、それともparamikoの仕様か
50
- どうか調査しても特定できないため、ご助力いただけないでしょうか。
51
-
52
- (2022/12/17 21:20追記)
53
21
  ```python
54
- # ■<{paramikoファイル}.py>
22
+ # ■<{paramikoファイル}.py>
55
23
  #別サーバのメイン処理実行
56
24
  def {メイン関数名}(data):
57
- print(data) # どこまで処理がうまくいっているかテスト用メッセージ 毎回出力される
25
+ print(data) # テスト用メッセージ【X
58
26
  with paramiko.SSHClient() as client:
59
27
 
60
28
  #logging.basicConfig()
@@ -66,11 +34,11 @@
66
34
  KEY_FILENAME = {'秘密鍵格納先'}
67
35
 
68
36
  # 実行コマンド設定(★いくつかのコマンドをテスト用に実行)
69
- print("BB") # どこまで処理がうまくいっているかテスト用メッセージ 【毎回出力される
37
+ print("BB") # テスト用メッセージ 【Y
70
- #LINUX_COMMAND = 'cd {{実行ファイル}.pyへのフルパス} ; python3 {実行ファイル}.py' # トファイルを実行
38
+ #LINUX_COMMAND = 'cd {{実行ファイル}.pyへのフルパス} ; python3 {実行ファイル}.py' # ケー1
71
- #LINUX_COMMAND = '/usr/bin/python3 {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py' # トファイルを実行
39
+ #LINUX_COMMAND = '/usr/bin/python3 {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py' # ケー2
72
- LINUX_COMMAND = 'bash {{実行ファイル}.shへのフルパス}/{実行ファイル}.sh' # トファイルを実行
40
+ LINUX_COMMAND = 'bash {{実行ファイル}.shへのフルパス}/{実行ファイル}.sh' # ケー3
73
- #LINUX_COMMAND = 'ls -l {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py'
41
+ #LINUX_COMMAND = 'ls -l {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py' # ケース99
74
42
 
75
43
  # SSH接続
76
44
  client = paramiko.SSHClient()
@@ -90,23 +58,23 @@
90
58
  {メイン関数名}(data)
91
59
  ```
92
60
  ```shell
93
- #■<{実行ファイル}.sh>
61
+ #■<{実行ファイル}.sh>
94
62
  ARRAY=(1 2)
95
63
  for num in ${ARRAY[@]}; do
96
64
  /usr/bin/python3 /フルパス/{実行ファイル}.py --pyファイル実行用
97
- echo $num"回目のループです" --本ファイル実行有無確認
65
+ echo $num"回目のループです" --テストメッセージ【Z】
98
66
  done
99
67
  ```
100
68
 
101
69
  ```python
102
- # ■<{実行ファイル}.py>
70
+ # ■<{実行ファイル}.py>
103
71
  ##メインクラス
104
72
  if __name__ == '__main__':
105
73
 
106
74
  touch_file = pathlib.Path( "./20221217test.txt" ) # 空ファイル作成 【★Bサーバで実行すると出力されるがAサーバからだと作成されない】
107
75
  touch_file.touch()
108
76
 
109
- print("print出力") # この応答は返ってくる想定だった
77
+ print("print出力") # テスト用メッセージ【α】
110
78
  logger = LogOutTest.LogOutTest() # ログファイル出力用関数 【★Bサーバで実行すると出力されるがAサーバからだと出力されない】
111
79
  logger.info('処理中')
112
80
  a = 1
@@ -115,5 +83,12 @@
115
83
  logger.info('変数a:' + str(a) + '|変数b:' + str(b) + '【処理結果:' + str(c) + '】')
116
84
  logger.info('処理済')
117
85
  ```
86
+ ■試行内容 【print,echo結果】
87
+ ①AサーバからsshコマンドでBサーバに接続してpython3コマンド({実行ファイル}.py)実施【α】
88
+ ②AサーバからsshコマンドでBサーバに接続してshコマンド({実行ファイル}.sh)実施【Z,α】
89
+ ③Aサーバpython3コマンド({paramikoファイル}.py)実施 # ケース1,2【X,Y】
90
+ ④Aサーバpython3コマンド({paramikoファイル}.py)実施 # ケース3【X,Y,Z】
118
91
 
92
+ 環境設定か、コーディングが悪いのか、それともparamikoの仕様か
93
+ どうか調査しても特定できないため、ご助力いただけないでしょうか。
119
94
 

1

コーディング内容を追記 ({}=実コーディングから別名に変更した意

2022/12/17 12:25

投稿

aluter
aluter

スコア1

test CHANGED
File without changes
test CHANGED
@@ -49,3 +49,71 @@
49
49
  環境設定か、コーディングが悪いのか、それともparamikoの仕様か
50
50
  どうか調査しても特定できないため、ご助力いただけないでしょうか。
51
51
 
52
+ (2022/12/17 21:20追記)
53
+ ```python
54
+ # ■①<{paramikoファイル}.py>
55
+ #別サーバのメイン処理実行
56
+ def {メイン関数名}(data):
57
+ print(data) # どこまで処理がうまくいっているかテスト用メッセージ 【毎回出力される】
58
+ with paramiko.SSHClient() as client:
59
+
60
+ #logging.basicConfig()
61
+ #logging.getLogger("paramiko").setLevel(logging.DEBUG)
62
+
63
+ # 接続先情報(バッチサーバ)
64
+ HOSTNAME = {'IPアドレス'}
65
+ USERNAME = {'Iユーザー名'}
66
+ KEY_FILENAME = {'秘密鍵格納先'}
67
+
68
+ # 実行コマンド設定(★いくつかのコマンドをテスト用に実行)
69
+ print("BB") # どこまで処理がうまくいっているかテスト用メッセージ 【毎回出力される】
70
+ #LINUX_COMMAND = 'cd {{実行ファイル}.pyへのフルパス} ; python3 {実行ファイル}.py' # テストファイルを実行
71
+ #LINUX_COMMAND = '/usr/bin/python3 {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py' # テストファイルを実行
72
+ LINUX_COMMAND = 'bash {{実行ファイル}.shへのフルパス}/{実行ファイル}.sh' # テストファイルを実行
73
+ #LINUX_COMMAND = 'ls -l {{実行ファイル}.pyへのフルパス}/{実行ファイル}.py'
74
+
75
+ # SSH接続
76
+ client = paramiko.SSHClient()
77
+ client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
78
+
79
+ # 公開鍵認証方式
80
+ client.connect(HOSTNAME, username=USERNAME, key_filename=KEY_FILENAME)
81
+
82
+ # コマンド実行
83
+ stdin, stdout, stderr = client.exec_command(LINUX_COMMAND)
84
+
85
+ for line in stdout:
86
+ print(line, end='')
87
+
88
+ if __name__ == "__main__":
89
+ data = "バッチ実行"
90
+ {メイン関数名}(data)
91
+ ```
92
+ ```shell
93
+ #■②<{実行ファイル}.sh>
94
+ ARRAY=(1 2)
95
+ for num in ${ARRAY[@]}; do
96
+ /usr/bin/python3 /フルパス/{実行ファイル}.py --pyファイル実行用
97
+ echo $num"回目のループです" --本ファイル実行有無確認用
98
+ done
99
+ ```
100
+
101
+ ```python
102
+ # ■③<{実行ファイル}.py>
103
+ ##メインクラス
104
+ if __name__ == '__main__':
105
+
106
+ touch_file = pathlib.Path( "./20221217test.txt" ) # 空ファイル作成 【★Bサーバで実行すると出力されるがAサーバからだと作成されない】
107
+ touch_file.touch()
108
+
109
+ print("print出力") # この応答は返ってくる想定だった
110
+ logger = LogOutTest.LogOutTest() # ログファイル出力用関数 【★Bサーバで実行すると出力されるがAサーバからだと出力されない】
111
+ logger.info('処理中')
112
+ a = 1
113
+ b = 2
114
+ c = a + b
115
+ logger.info('変数a:' + str(a) + '|変数b:' + str(b) + '【処理結果:' + str(c) + '】')
116
+ logger.info('処理済')
117
+ ```
118
+
119
+