脚本日志记录问题:脚本日志记录不完整,难以诊断问题

1. 统一日志输出方式

为了避免日志丢失或分散,建议将所有日志输出到一个文件中,同时捕获标准输出和标准错误流。

Bash 示例:

#!/bin/bash
 
# 将 stdout 和 stderr 同时重定向到日志文件
exec > >(tee -a script.log)  2>&1 
 
# 脚本逻辑
echo "脚本开始运行"
ls /nonexistent_directory 

2. 增加详细的日志记录

在脚本的关键步骤中增加日志记录,确保每一步的操作都能被追踪。

Python 示例:

import logging
 
# 配置日志
logging.basicConfig( 
    filename='script.log', 
    level=logging.DEBUG,
    format='%(asctime)s - %(levelname)s - %(message)s'
)
 
# 示例日志记录
logging.info(" 脚本开始运行")
logging.debug(" 变量 x 的值为 10")
 
try:
    # 模拟可能出错的操作
    with open('nonexistent_file.txt',  'r') as f:
        data = f.read() 
except Exception as e:
    logging.error(f" 发生异常: {e}", exc_info=True)

3. 捕获异常并记录

确保脚本在出现异常时不会直接退出,而是捕获异常并记录详细信息。

Bash 示例:

#!/bin/bash
 
# 设置 trap 捕获错误
trap 'echo "Error occurred at line $LINENO" >> error.log'  ERR 
 
# 脚本逻辑
echo "脚本开始运行"
ls /nonexistent_directory 

Python 示例:

try:
    # 可能出错的代码
    risky_operation()
except Exception as e:
    logging.error(f" 发生异常: {e}", exc_info=True)

4. 使用日志轮转工具

如果日志文件过大导致丢失或难以管理,可以使用 logrotate 定期归档和清理日志。

Logrotate 配置示例:

# /etc/logrotate.d/your_script
/path/to/script.log  {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

5. 检查系统资源限制

日志记录不完整可能与系统资源限制有关。以下是检查和调整资源限制的方法。

检查磁盘空间:

df -h

检查文件描述符限制:

ulimit -n

临时调整文件描述符限制:

ulimit -n 65535

6. 监控脚本运行状态

结合 systemd 或 cron 确保脚本持续运行,并在异常退出时触发告警。

Systemd 服务文件示例:

[Unit]
Description=Your Script Service
After=network.target 
 
[Service]
ExecStart=/path/to/your_script.sh  
Restart=always 
StandardOutput=append:/var/log/your_script.log  
StandardError=append:/var/log/your_script_error.log 
 
[Install]
WantedBy=multi-user.target  
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容