У меня есть файл, который постоянно растет, потому что какой-то процесс пишет в него. Моя цель - запустить другой процесс, который будет отслеживать изменения в этом файле, выполнить некоторую предварительную обработку sed / awk / bash и затем вставить результат в базу данных. Это может быть достигнуто с помощью следующей команды:
#!/bin/bash
tail -f -n +1 growing_file | while read a; do
query=$(echo "$a" | awk '{print "use log; INSERT INTO log (message) VALUES(\"" $4 "\");"}';)
echo "$query"
mysql -u root -pSecretPassword -h dbs-host -e "$query"
done
Но у него есть недостаток, заключающийся в том, что для каждой вставки мне нужно установить отдельное соединение, выполнить аутентификацию, выбрать базу данных и, наконец, выполнить вставку. Это также возвращает ошибки после нескольких секунд выполнения:
ОШИБКА 2003 (HY000): Невозможно подключиться к MySQL серверу на «dbs-host» (111 «Соединение отказано»)
Чего хотелось бы добиться, это открыть соединение с базой данных, а затем повторно использовать это открытое соединение для вставок. Я пробовал команду coproc
, но не смог достичь своей цели.
PS: также приветствуются решения на других языках, кроме bash (python, node.js, ...)