linux - 在Linux中,如何使用ssh和expect在远程服务器上监控shell脚本执行的进度

标签 linux bash ssh expect

我在 shell 脚本 connect.sh 中有以下代码。远程脚本至少需要 1 小时才能完成执行。只有在远程脚本执行完成后,我才能在 $local_dir/file.tmp 中看到以下脚本的输出,我必须等待一小时。

如何在执行过程中并行监控远程脚本的输出/进度?

cat connect.sh:

#!/bin/bash 
local_dir="/scratch"

/usr/bin/expect > "$local_dir/file.tmp" << EOF

    set timeout -1
    spawn ssh -o "StrictHostKeyChecking no" "user@host" "cd /u01; ./remote_script.py arg1 arg2 arg3 arg4" 
    expect "user@host's password:"
    send "$pwd\r"
    expect "*#*"
EOF

最佳答案

日志将收集 remote_script.py 打印的任何内容。会有缓冲,所以如果它只打印几行,你将不会看到它们,直到作业完成,或者直到作者强行刷新缓冲区。

作为一种变通方法,可以更改 remote_script.py 以便它将进度报告打印到标准错误。 Python logging 模块使这变得简单直观。

import logging

def main():
    logging.info('Starting up ...')
    # Do startup stuff
    for n in range(100000):
        if n % 10000 == 0:
            logging.info('Progress: {0}/100000'.format(n))
        # do more things in each iteration

if __name__ == '__main__':
    logging.basicConfig(level=logging.INFO,
        format='%(module)s:%(asctime)s:%(message)s')
    main()

关于linux - 在Linux中,如何使用ssh和expect在远程服务器上监控shell脚本执行的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54415991/

相关文章:

c++ - 在 Solaris 上,连续内存分配不会减小镜像大小

node.js - 如何在 Linux 上升级 angular-cli? CLI v6 不支持 Node.js V6.14.3

linux - 在 bash 脚本中,如何在 while 循环条件中使用函数退出状态

linux - Bash 脚本没有扩展我的 $file 变量?

iphone - 如何使用SSH使用Internet特权/远程服务器的访问权限

php - 从cpanel crontab调用/usr/bin/php总是给出而不是cgi-fcgi

linux - 帮助我从 ABS 指南中理解 bash 中的这个简单的 io 重定向

linux - 多个任务等待同一个信号量

python - 将Python文件作为linux命令执行

linux - ssh-keyscan 不清除本地主机