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
暂无评论内容