#!/bin/bash logfile="mysql$(date +"%Y-%m-%d %H:%M:%S").log" mysql_pid=(pgrep -d, mysqld) echo ${mysqld_pid} >> "/home/xindun/2.log" top -p ${mysqld_pid} >> "$logfile"优化这段代码
时间: 2024-03-27 19:35:50 浏览: 13
这段代码可以优化如下:
```
#!/bin/bash
# 设置日志文件路径和名称
logfile="/var/log/mysql$(date +"%Y-%m-%d_%H:%M:%S").log"
# 查找 MySQL 进程的 PID
mysql_pid=$(pgrep mysqld)
# 如果没有找到 MySQL 进程,则退出脚本
if [ -z "$mysql_pid" ]; then
echo "MySQL process not found!" >&2
exit 1
fi
# 不断执行 top 命令,并将输出附加到日志文件中
while true; do
top -b -n 1 -p "$mysql_pid" >> "$logfile"
sleep 5
done
```
这段代码会一直执行 top 命令,并将输出附加到日志文件中。如果 MySQL 进程不存在,则会输出错误信息并退出脚本。使用 -b 和 -n 1 选项可以使 top 命令只输出一次,并且不会交互式地等待用户输入。使用 sleep 命令可以让脚本每隔 5 秒执行一次 top 命令,避免在短时间内产生大量的日志。
相关问题
修改一下shell脚本,添加日志#!/bin/bash # MySQL备份脚本 # 设置备份文件名 BACKUPFILE=backup-$(date +%Y-%m-%d).sql # 设置MySQL登录信息 MYSQLUSER=root MYSQLPASSWORD=password # 备份MySQL数据库 mysqldump -u $MYSQLUSER -p$MYSQLPASSWORD --all-databases > $BACKUPFILE # 压缩备份文件 gzip $BACKUPFILE
可以通过以下步骤来修改shell脚本并添加日志:
1. 在脚本中添加日志文件的路径和名称,例如:
LOG_FILE=/var/log/my_script.log
2. 在脚本中添加日志记录的语句,例如:
echo "$(date "+%Y-%m-%d %H:%M:%S") Starting script..." >> $LOG_FILE
3. 在脚本中添加错误日志记录的语句,例如:
echo "$(date "+%Y-%m-%d %H:%M:%S") Error: something went wrong." >> $LOG_FILE
4. 在脚本中添加成功日志记录的语句,例如:
echo "$(date "+%Y-%m-%d %H:%M:%S") Script completed successfully." >> $LOG_FILE
通过添加日志记录,可以更好地了解脚本的执行情况,方便排查问题和优化脚本。
#!/bin/bash #变量不能为空 if [ "$1" = "" -a "$2" = "" -a "$3" = "" -a "$4" = "" -a "$5" = "" ];then echo "please specify variable bfe_log_dir mysqlHost mysqlPort mysqlDBName time" exit 0 fi loadDataFile="./time_consuming.log" logFilesDir="./log_files.txt" fileDate=$(date -d $5' minute ago' +'%Y-%m-%d %H:%M:%S') nowDate=$(date '+%Y-%m-%d %H:%M:%S') if [ ! -f $logFilesDir ];then touch $logFilesDir echo "create log_files success." else echo "log_files ready" fi find $1 -type f -newermt "$fileDate" ! -newermt "$nowDate" -name 'access_2.log.*' > $logFilesDir if [ ! -f $loadDataFile ];then touch $loadDataFile echo "create load date file success." else echo "load date file ready" fi echo > $loadDataFile #start read bfe log file while read line do echo "read bfe log file: "$line #采集Link-trace-id,backendDur字段信息 cat $line | grep "type\[Req\]" | awk -F"]" '{print $1,$12}' | awk -F"[\[ ]" '{print $2","$5}' |awk -F , '{if($1!="-")print}' >> $loadDataFile done < $logFilesDir echo "backent dur write file success." #将采集信息插入到数据库中 loadCommand="load data local infile '$loadDataFile' into table ai_backend_dur_log fields terminated BY ',' lines terminated BY '\n' (trace_id,backend_dur);" mysql --local-infile=1 -u gzaipbc -pGzaipbc@123 -h $2 -P $3 $4 -e "$loadCommand" exit 0
这是一个 Bash 脚本,主要功能是从指定目录中读取符合时间范围内的日志文件,提取其中的特定字段信息,然后将这些信息插入到指定的 MySQL 数据库表中。具体流程如下:
1. 首先判断是否传入了必要的参数,如果没有就提示用户输入。
2. 创建用于记录符合时间范围内的日志文件名的文件 log_files.txt。
3. 使用 find 命令查找指定目录中符合时间范围内的日志文件,将其文件名写入 log_files.txt 中。
4. 创建用于记录采集到的信息的文件 time_consuming.log。
5. 读取 log_files.txt 中的每个日志文件,使用 grep 和 awk 命令从中提取出 Link-trace-id 和 backendDur 两个字段的信息,将其写入 time_consuming.log 文件中。
6. 将 time_consuming.log 文件中的信息通过 load data 命令插入到指定的 MySQL 数据库表中。
注意,脚本中的参数依次为:bfe_log_dir(指定的目录)、mysqlHost(MySQL 主机名)、mysqlPort(MySQL 端口号)、mysqlDBName(MySQL 数据库名)、time(时间范围,单位为分钟)。另外,脚本中的 MySQL 用户名和密码都是写死的,需要根据具体情况修改。