jag*_*ada 14 logs io-redirection shell-script mysql
在使用一些底层 MySQL 命令运行 shell 脚本时,我的日志文件被转储了以下消息。
这是消息:
“警告:在命令行界面上使用密码可能不安全。”
为了停止这些消息,我使用了以下作业定义。
例子:
run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1
Run Code Online (Sandbox Code Playgroud)
这有效,但未将 MySQL 错误记录到output.log
.
如果我像下面那样更改定义,那么 MySQL 错误就会开始出现(如果有的话)
run_wrapper.sh > output.log 2>&1
Run Code Online (Sandbox Code Playgroud)
所以问题是如何仅使用 cron 定义来抑制警告消息并报告日志文件中的 SQL 错误?
d a*_*s y 30
在您的 bash 脚本中,在顶部编辑它
export MYSQL_PWD=yourdbpassword
Run Code Online (Sandbox Code Playgroud)
和 mysql 查询,如: mysql -u username -h host db -e "statement"
参考:来自Stackoverflow 上发布的答案。也可以遵循其他答案。
尝试这个:
lf='output.log'
> "$lf" # first truncate/create the logfile.
run_wrapper.sh >> "$lf" 2> >(grep -v "Warn.*passw.*insec" >> "$lf")
Run Code Online (Sandbox Code Playgroud)
通过Process Substitution将 stderr 重定向到grep -v ...
,并将其输出附加>>
到output.log
您可能想要使用 (GNU)grep
的--line-buffered
选项并-v
确保错误输出不会延迟。
run_wrapper.sh
如果对日志文件进行后处理是您可以接受的选项,则可以在完成后从日志文件中删除不需要的“警告:”行。
以下 shell 脚本片段在运行之前保存$ts
日志文件 (in ) 的时间戳 (in )并在运行后恢复它:$lf
sed -i
lf='output.log'
run_wrapper.sh >& "$lf"
ts=$(date -r "$lf" '+%Y%m%d%H%M.%S')
sed -i -e '/Warning: Using a password/d' "$lf"
touch -t "$ts" "$lf"
Run Code Online (Sandbox Code Playgroud)
如果您需要保留日志文件的索引节点(例如因为它具有硬链接),请使用ed
而不是sed
:
ts=$(date -r "$lf" '+%Y%m%d%H%M.%S')
printf "%s\n" 'g/Warning: Using a password/d' w | ed -s "$lf"
touch -t "$ts" "$lf"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42153 次 |
最近记录: |