基礎となるいくつかの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
では、問題は警告メッセージを抑制し、cron定義のみを使用してログファイルにSQLエラーを報告する方法です。
Bashスクリプトで、上部で編集します
export MYSQL_PWD=yourdbpassword
とmysqlクエリ:mysql -u username -h Host db -e "statement"
参照:Stackoverflow に投稿された回答から。他の回答もフォローできます。
ラッパーで次のような行を検索します
mysql -u<username> -p<some_password> -hlocalhost -D<database_name>
に変更
export MYSQL_PWD=<some_password> ; mysql -u<username> -hlocalhost -D<database_name>
これは警告の原因を解決します。
stderrリダイレクトがrun_wrapper.sh
自体から欠落しているようです。そのため、エラーはgrep
を通過せず、ログファイルにも記録されません。
stdoutとsdterrの両方をログファイルに書き込んでよければ、代わりにこれを試してください
run_wrapper.sh 2>&1 | grep -v "Warning: Using a password" > output.log
または、ログファイルに書き込まれたエラーのみが必要で、stdoutが呼び出し側端末に書き込まれたままになっている場合は、これを試してください
( run_wrapper.sh 2>&1 1>&3 | grep -v "Warning: Using a password" > output.log ) 3>&1
コマンドの最後にこれを追加してみてください:
/ dev/null 2>&1
これを試して:
lf='output.log'
> "$lf" # first truncate/create the logfile.
run_wrapper.sh >> "$lf" 2> >(grep -v "Warn.*passw.*insec" >> "$lf")
Process Substitution を介してstderrをgrep -v ...
にリダイレクトし、その出力に>>
を追加してoutput.log
に追加します。
(GNU)grep
の--line-buffered
オプションと-v
を使用して、エラー出力が遅延しないようにする必要があります。
ログファイルの後処理が許容できるオプションである場合は、run_wrapper.sh
の終了後に、不要な "Warning:"行をログファイルから削除できます。
次のシェルスクリプトフラグメントは、$ts
を実行する前にログファイル($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"
ログファイルのiノードを保持する必要がある場合(ハードリンクがあるためなど)、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"