在PythonParamiko中执行的远程sh脚本永无止境

问题描述

你好,我在其他计算机上有下一个 sh脚本,如机器.35中的下一个

#!/bin/bash

mount //X.X.X.20/home/sybase /home/sybase/

Today=$(date --date="today" +%Y%m%d)
Yesterday=$(date --date="yesterday" +%Y%m%d)

LOG=/home/sybase/Log/${Today}_query.log

echo " Arranco el cron: " $(date)  >> $LOG
echo " Export for day: " $Today >>$LOG

RemovalDay=$(date --date "-7 days" +"%Y%m%d")
echo " Removal LogFile date: " $RemovalDay >> $LOG

RemovalDay2=$(date --date "-7 days" +"%Y"-"%m"-"%d")
echo " Removal LogFile date: " $RemovalDay2 >> $LOG

# Execute two queries in 2 different Sybase servers
expect << EOF
set timeout 5000000

spawn su sybase
expect "$ "
send " dbisql -nogui -c \"uid=dba;pwd=sql;eng=store1;dbn=store1\" -host X.X.X.32 -port 2640 /home/sybase/query1.sql \r "
expect "$ "
send " dbisql -nogui -c \"uid=dba;pwd=sql;eng=store2;dbn=store2\" /home/sybase/query2.sql \r "
expect "$ "

send "exit \r "

EOF

###  Result moved to folder mounted in .20

chmod 777 /home/sybase/query.txt
mv -f /home/sybase/query.txt /home/sybase/query_${Yesterday}.txt
echo " Move file query.txt to mounted folder to be stored" $(date)  >> $LOG

### Unmounted.27 paths and delete intermediate files

echo " Deleted server2 file query2 " >> $LOG

## Remove exports from prevIoUs days -7

echo " Deleted Export File query.log " >> $LOG

## Remove logs from prevIoUs days -7

echo " Deleted Old LogFile "${RemovalDay}"_query.log " >> $LOG

echo " Deleted Old Crontab LogFile "${RemovalDay2}"_query.log " >> $LOG

umount /home/sybase/

echo " Unmounted all folders " $(date)  >> $LOG

如果我在.35计算机上本地执行,则 sh脚本query.sh相对较快,大​​约需要10秒钟才能完成并完成。

当我尝试使用下一个python程序从IP为.20的另一台计算机远程执行该脚本时:

import paramiko
import os
import time

## Connect to the store1 via SSH (paramiko)

hostname = "X.X.X.35"
port = 22
username = "user"
password = "pass"

# initialize the SSH client
client = paramiko.SSHClient()
# add to kNown hosts
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
    client.connect(hostname=hostname,username=username,password=password,port=port)
except:
    print("[!] Cannot connect to the SSH Server")
    exit()

stdin,stdout,stderr = client.exec_command('bash /home/sybase/query.sh')

time.sleep(60)

# read the standard output and print it
stdout.channel.recv_exit_status()
lines = stdout.readlines()
for line in lines:
    print(line)
# close the connection
client.close()

它似乎永远无法完成,只是仍在执行,但什么也没发生,结果永远不会导出。

但是,当执行python程序时,如果我在XXX35机器(位于sh脚本query.sh所在的位置)中执行ps | aux grep query.sh,我会发现它有2行:

ps aux | grep query.sh

35001 24672 0.0 0.0 106116 1420? Ss 15:26 0:00狂欢 -c bash /home/sybase/query.sh

35001 24700 0.0 0.0 106116 1244? S 15:26 0:00扑 /home/sybase/query.sh

它还会永远执行。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)