質問編集履歴
3
環境変数の取得(source)のためにシェルの追加({paramikoファイル}.sh)
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
|
-
|
74
|
+
echo $環境変数名
|
63
|
-
|
75
|
+
echo "Webサーバ"
|
64
76
|
/usr/bin/python3 /フルパス/{実行ファイル}.py --pyファイル実行用
|
65
|
-
echo
|
77
|
+
echo "処理完了です" --テスト用メッセージ【Z】
|
66
78
|
done
|
67
79
|
```
|
68
80
|
|
2
全体内容を修正(不明瞭部分を修正) ※■試行内容に試行内容と【print,echo結果】を記載
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
|
-
# ■
|
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
|
-
#■
|
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
|
-
# ■
|
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
コーディング内容を追記 ({}=実コーディングから別名に変更した意
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
|
+
|