#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
команды. вместо этого режим сна можно запустить на исходном компьютере.