【问题标题】:Keep a remote seesion running until the end of a program using a script?使用脚本保持远程会话运行直到程序结束?
【发布时间】:2020-07-04 12:17:44
【问题描述】:

我想在 Linux 服务器 A 上运行一个程序。Linux 服务器 B 可以监控服务器 A 的功率指标​​。 但是为了测量在服务器 A 上运行的程序,我需要在服务器 A 上的程序开始时打开服务器 B 上的测量脚本,然后在服务器 B 上手动结束它。

所以总结一下,如何通过脚本 ssh 进入服务器以运行程序并在之后终止它?

【问题讨论】:

    标签: bash ssh openssh ssh-tunnel


    【解决方案1】:

    这里需要一些技巧。 1. 我正在使用sshpass 通过 ssh 自动输入机器密码(以纯文本形式存储在不安全的脚本中)。 2. 我正在这个脚本中编写一个脚本,然后通过 ssh 执行 3. 我将服务器A上运行的程序的pid存储在它的/tmp目录中

    #!/bin/bash
    PROGRAM_TO_RUN_ON_SERVER_A="sleep 1000"
    PASSWORD_TO_USER_ON_SERVER_A="password"
    SERVER_A_USER="user"
    SERVER_A_MACHINE_NAME="machine-name"
    
    # Create a local script to run on server A
    SCRIPT=/tmp/script.sh
    export SSHPASS=${PASSWORD_TO_USER_ON_SERVER_A}
    echo '#!/bin/bash' > $SCRIPT
    echo "(( ${PROGRAM_TO_RUN_ON_SERVER_A} 0<&- &>/dev/null & echo $! > /tmp/pid.txt) &)" >> $SCRIPT
    
    # Execute script on server A (This also executes your program)
    sshpass -e ssh ${SERVER_A_USER}@${SERVER_A_MACHINE_NAME} 'bash -s' < $SCRIPT
    
    # Do server B timing analysis things here
    # ...
    # ...
    # ...
    
    # Kill the program running on server A
    sshpass -e ssh ${SERVER_A_USER}@${SERVER_A_MACHINE_NAME} 'cat /tmp/pid.txt | xargs kill -9'
    

    Getting ssh to execute a command in the background on target machine

    【讨论】:

    • 感谢您提供此脚本。刚刚检查了服务器 B。它是对 linux comamnds 的有限支持的嵌入系统(它使用一个名为 ash 的特殊外壳)。它不支持nohup。有什么解决方法吗?
    • 不知何故我在最后使用了 simpe & 符号。
    猜你喜欢
    • 2013-07-17
    • 2016-02-06
    • 2013-06-06
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多