面试题答案
一键面试实现思路
- 记录时间戳:使用
date +%Y%m%d%H%M%S%3N
获取精确到毫秒的时间戳。 - 日志记录:通过重定向操作符
>
和2>
分别将标准输出和标准错误输出重定向到不同文件。 - 日志切割:利用
logrotate
工具,它是一个Linux系统下用于管理日志文件的工具,能够按指定条件切割日志。
关键代码片段
- Bash脚本中记录日志:
#!/bin/bash
timestamp=$(date +%Y%m%d%H%M%S%3N)
stdout_log="stdout_${timestamp}.log"
stderr_log="stderr_${timestamp}.log"
command1 | command2 > >(tee -a $stdout_log) 2> >(tee -a $stderr_log >&2)
# 后续命令类似处理,例如
command3 > >(tee -a $stdout_log) 2> >(tee -a $stderr_log >&2)
- 配置
logrotate
: 创建一个logrotate
配置文件,例如/etc/logrotate.d/your_script_logs
,内容如下:
/path/to/stdout_*.log {
size 10M
missingok
rotate 5
compress
delaycompress
notifempty
create 644 your_user your_group
sharedscripts
postrotate
# 这里可能需要重新启动相关服务以通知其使用新的日志文件
/bin/kill -HUP `cat /var/run/your_service.pid 2>/dev/null` 2>/dev/null || true
endscript
}
/path/to/stderr_*.log {
size 10M
missingok
rotate 5
compress
delaycompress
notifempty
create 644 your_user your_group
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/your_service.pid 2>/dev/null` 2>/dev/null || true
endscript
}
上述配置中,size 10M
表示日志文件达到10MB时进行切割,rotate 5
表示保留5个旧的日志文件,compress
表示压缩旧日志文件等。根据实际情况调整create
中的用户和组以及postrotate
中的服务重启命令。