BASH-将时间戳添加到mysql cli命令的输出

时间:2018-12-06 10:42:03

标签: bash shell

我需要使用时间戳记录mysql cli命令的输出,以检查连接问题。我这样写:

echo "$(date -u) - $(mysql -u${DATABASE_USER} -p${DATABASE_PASSWORD} -h ${WRONG_HOST} -e 'quit')" >> /check_RDS.log

我看到了日志文件

tue 6 dec 2018, 10.37.04, UTC -

代替

tue 6 dec 2018, 10.37.04, UTC - ERROR 2003 (HY000): Can't connect to MySQL server on 'xx.xx.xx.xx' (111)

我也尝试过ts

mysql -u${DATABASE_USER} -p${DATABASE_PASSWORD} -h ${WRONG_HOST} -e 'quit' | ts

结果是:

ERROR 2003 (HY000): Can't connect to MySQL server on 'xx.xx.xx.xx' (111)

我如何在日志的同一行上附加日期?

2 个答案:

答案 0 :(得分:1)

我建议先使用<View style={{backgroundColor: "#fff"}}> <Slider style={{ width: '90%',marginLeft:20,marginRight:20 }} minimumValue={0} maximumValue={100} step={1} value={this.state.cost} onValueChange={cost => console.log(cost)} /> <Text style={{marginLeft:20,marginRight:20}}>{this.state.cost}</Text> </View> ,然后再使用echo -n "$(date -u) - " >> check_RDS.log命令。

mysql将阻止换行,因此下一行将被“追加”。

您提到的另一个问题是对流(stdout和stderr)的不同处理。

echo -n

将两者结合在一起。

答案 1 :(得分:1)

无论使用哪种方法,都需要在2>&1命令之后附加一个mysql ...。这是因为管道以及命令替换仅使用stdin,而stderr只会显示在控制台上。

echo "$(date -u) - $(mysql -u${DATABASE_USER} -p${DATABASE_PASSWORD} -h ${WRONG_HOST} -e 'quit' 2>&1)" >> /check_RDS.log

mysql -u${DATABASE_USER} -p${DATABASE_PASSWORD} -h ${WRONG_HOST} -e 'quit' 2>&1 | ts

但是比echo "... $(mysql -u ... 2>&1)"更好的是将输出直接写入文件。如tamasgal's answer中所述。