Проблема заключалась в неправильном имени хоста .
Этот ответ вместо этого фокусируется на том, как лучше написать код.
Вам не нужно запускать весь конвейер на удаленном узле. Выполнение сложных команд в командной строке с ssh
довольно подвержено ошибкам, не в последнюю очередь с точки зрения цитирования.
Вместо:
#!/bin/bash
key="keys/cash_prod_key"
ssh_args=( -o StrictHostKeyChecking=no -qni "$key" user@host )
if ssh "${ssh_args[@]}" cat /var/log/FILE_send.log |
grep -F 'FILENAME' |
grep -q -i -F 'success'
then
echo 'Success'
fi
Это запустит только cat
на удаленном хосте, а затем запустит две команды grep
локально.
Я также добавил флаг -F
к командам grep
, предполагая, что строки, используемые в качестве шаблонов, являются не регулярными выражениями, а буквальными строками, которые вы хотите найти. Последний grep
использует -q
, так как нас на самом деле не интересует просмотр вывода, а только то, содержит ли он строку success
или нет.
Чтобы упростить чтение, я поместил аргументы, используемые с ssh
, в массив, который позже буду использовать в вызове, а также сделал строки немного короче, просто вставив символы новой строки после вертикальной черты. символы. Скрипт по-прежнему синтаксически корректен. Также обратите внимание, что любое расширение переменной и т. д. всегда должно заключаться в двойные кавычки, если вы не знаете, в каких контекстах это не требуется .
Обратите внимание: я предполагаю, что команда ssh
вызывается правильным образом.