【问题标题】:Pass runtime variables into bash script which does ssh to remote server将运行时变量传递到 bash 脚本中,该脚本执行 ssh 到远程服务器
【发布时间】:2021-06-01 17:54:47
【问题描述】:

我需要通过 ssh 连接到远程服务器并在某个特定时间运行一些命令。我注意到一旦使用 arg1 ($1) 建立了 ssh,arg2($2) 就不再有效。不幸的是,我无法在我的 linux 服务器中安装任何工具,那么还有其他方法吗?

#!/bin/bash
echo 'Host = ' $1
USERNAME=ec2-user
KEY=/home/xxx/xxx.pem
ssh -l ${USERNAME} -i ${KEY} $1 '
  while true
  do
    echo $(date)
    echo stats | nc localhost 11211 | grep cmd_flush
    if [$2 == 'sec']; then
      sleep 1
    elif [$2 == 'min']; then
      sleep 1m
    elif [$2 == '30min']; then
      sleep 30m
    elif [$2 == 'hr']; then
      sleep 1h
    elif [$2 == '12hr']; then
      sleep 12h
    elif [$2 == 'day']; then
      sleep 1d
    elif [$2 == 'week']; then
      sleep 7d
    else
      echo "None of the condition met"
    fi
  done
' | tee /var/log/$1_$2.log

【问题讨论】:

  • 将您的脚本粘贴到shellcheck.net 以修复一些常见错误。
  • 这不是关于 $2 或 ssh,而是关于您正在使用的简单引号。使用' 可以防止变量扩展。
  • @Miguel 那个单引号是因为我想重用同一个 ssh 连接并且需要让它保持活动状态。如果我对这些值进行硬编码,则脚本运行良好。但我不想为差异时间创建很多代码。帧。
  • 现在您正在向目标服务器发送睡眠命令。您可以改为在源服务器上设置 cron 作业。并且 cron 作业只会在您的目标服务器上调用一次 ssh 命令。将计时逻辑从目的地移动到源。

标签: bash ssh


【解决方案1】:

如果您想在特定时间执行命令,请在源 PC 上进行评估,您可以更快、更轻松地进行故障排除,此外您还可以在源 PC 上安装工具。您只需要连接到远程 pc 来运行命令,而不需要打开连接来运行 sleep 命令。 sleep 可以在您的源电脑上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2011-10-08
    • 2013-03-24
    • 2020-08-25
    相关资源
    最近更新 更多