Мои файлы журнала сбрасываются со следующим сообщением при выполнении сценариев оболочки с использованием некоторых базовых команд MySQL.
Вот сообщение:
«Предупреждение. Использование пароля в интерфейсе командной строки может быть небезопасным».
Чтобы остановить эти сообщения, я использую следующее определение задания.
Пример:
run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1
Это сработало, но ошибки MySQL не регистрируются output.log
.
Если я изменю определение следующим образом, то ошибки MySQL начнут появляться, если таковые имеются
run_wrapper.sh > output.log 2>&1
Таким образом, вопрос заключается в том, как подавить предупреждающие сообщения, а также сообщить об ошибках SQL в файлах журналов, используя только определение cron?
shell-script
logs
io-redirection
mysql
Jagadish Puvvada
источник
источник
run_wrapper.sh >> output.log 2>&1
-p
опцию в командной строке. Вместо того, чтобы исправить его (например, путем создания~/.my.cnf
с 600 перми) ОП хочет просто игнорировать и отбрасывать предупреждение (и только это предупреждение, а не все stderr)Ответы:
В вашем скрипте bash отредактируйте его сверху
и MySQL запрос, как:
mysql -u username -h host db -e "statement"
Ссылка: Из ответа, опубликованного на Stackoverflow . Другие ответы также могут следовать.
источник
найдите строку в вашей обёртке, похожую на
и изменить на
это решает источник предупреждения.
источник
Похоже, вы пропускаете перенаправление stderr от
run_wrapper.sh
самого себя, поэтому ошибки не проходят черезgrep
и в файл журнала.Попробуйте вместо этого, если вы счастливы, что и stdout, и sdterr записаны в ваш лог-файл
Или, если вы хотите, чтобы только ошибки записывались в файл журнала, а stdout оставлял запись в вызывающий терминал, попробуйте это
источник
Попробуй это:
Перенаправление стандартного вывод с помощью процесса замещения к
grep -v ...
, и с выходом , который добавляется>>
кoutput.log
Вы, вероятно, хотите использовать опцию (GNU)
grep
,--line-buffered
а также-v
убедиться, что вывод ошибок не задерживается.Если постобработка файла журнала является приемлемым вариантом для вас, вы можете просто удалить ненужные строки «Предупреждение:» из файла журнала после
run_wrapper.sh
завершения.Следующий фрагмент сценария оболочки сохраняет временную метку (in
$ts
) файла журнала (in$lf
) перед запускомsed -i
и восстанавливает ее впоследствии:Если вам нужно сохранить inode файла журнала (например, потому что он содержит жесткие ссылки), используйте
ed
вместоsed
:источник
-i
(и большинства форм «редактирования на месте»). Если запуск выполняется сразу после этого, он должен отличаться только микросекундами или секундами, конечно, в зависимости от размера файла журнала. Но ни в коем случаеd
команда (удалить строку)sed
не создаст пустую строку - что именно вы подразумеваете под этим?sed
теперь сохраняет и восстанавливает временную метку output.log.Попробуйте добавить это в конец вашей команды:
источник