Запуск и завершение работы TAIL через SSH с использованием BASH
Я пытаюсь отслеживать изменения файла через SSH и копировать его на локальный компьютер, используя BASH. Я выполнил следующую команду для мониторинга и копирования:
ssh root@192.168.88.238 "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log
Который работает отлично. Но затем он продолжает работать. Я хочу завершить хвост и SSH после определенного периода (или когда определенная строка найдена).
Я попробовал следующую команду, но она не сработала:
ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log && sleep 10 && exit"> ~/Desktop/Modem.log
Я тоже пробовал проходить exit
и значение ASCII CTRL+C
через эхо, но не смог завершить / убить хвост и ssh.
Тогда я попробовал следующее:
#!/bin/sh
ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log | while read TEMPLOGLINE"> ~/Desktop/Modem.log
do
[[ "${TEMPLOGLINE}" == *"temp"* ]] && pkill -P $$ tail
done
exit
Я также попробовал это:
#!/bin/sh
ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log
ssh -t root@192.168.88.238 "/X03"
ssh -t root@192.168.88.238 "exit"
Вот мой bash-файл на данный момент:
#!/bin/sh
ssh -t root@192.168.88.238 "tail -F /media/sdcard/SA000001.log"> ~/Desktop/Modem.log
Любые предложения о том, как мне поступить с этим?
Заранее спасибо.
2 ответа
Похоже, вы ищете что-то вроде этого:
#!/bin/bash
ssh root@192.168.88.238 tail -F /media/sdcard/SA000001.log | while read line; do
echo "$line"
if [[ $line =~ 'temp' ]]; then
exit
fi
done
Сохраните скрипт выше как foo.sh
или как угодно, сделайте его исполняемым (chmod a+x foo.sh
) а затем запустите его:
foo.sh > ~/Desktop/Modem.log
Это команда, которая вам нужна для выполнения работы:
ssh USER@HOST "bash -c 'sed '/PATTERN/q' <(tail -F /path/to/dest/log)'"> inlocal.log
ты можешь использовать awk
вместо этого, а также:
ssh USER@HOST "bash -c 'awk '1;/PATTERN/{exit}' <(tail -F /path/to/dest/log)'"> inlocal.log