Передайте переменные времени выполнения в сценарий bash, который выполняет ssh на удаленном сервере

#bash #ssh

Вопрос:

Мне нужно подключиться по ssh к удаленным серверам и выполнить несколько команд в определенное время. Я заметил, что как только ssh устанавливается с использованием arg1 ($1), 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
 

Комментарии:

1. Вставьте свой сценарий в shellcheck.net чтобы исправить некоторые распространенные ошибки.

2. Речь идет не о 2 долларах или ssh, а о простых котировках, которые вы используете. Использование ' предотвращает расширение переменной.

3. @Мигель, что одинарные кавычки-это потому, что я хочу повторно использовать одно и то же ssh — соединение и должен поддерживать его. Если я жестко закодирую значения, скрипт будет работать нормально. Но я не хочу создавать много кодов для разных времен. кадры.

4. Прямо сейчас вы отправляете команды сна на конечный сервер. Вместо этого вы можете настроить задания cron на своем исходном сервере. И задания cron будут вызывать команды ssh только один раз на ваших целевых серверах. Переместите логику синхронизации из пункта назначения в источник.

Ответ №1:

если вы хотите выполнить команду в определенное время, оцените это на исходном компьютере, вы сможете быстрее и проще устранять неполадки, а также вы можете установить инструменты на свой исходный компьютер. Вам нужно только подключиться к удаленному компьютеру, чтобы выполнить только команду, а не оставлять соединение открытым для выполнения sleep команды. вместо этого режим сна можно запустить на исходном компьютере.