【发布时间】: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 命令。将计时逻辑从目的地移动到源。