问题描述
你好,我在其他计算机上有下一个 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 (将#修改为@)