插件窝 干货文章 linux batch如何进行日志记录

linux batch如何进行日志记录

日志 log script 脚本 967    来源:    2025-05-13

Linux Batch 日志记录方法

在Linux系统中进行批处理(batch)作业时,有多种方法可以实现日志记录。以下是几种常用的方法:

1. 使用重定向

最简单的方法是将输出重定向到文件:

#!/bin/bash
/path/to/your/script.sh > /var/log/script.log 2>&1
  • > 重定向标准输出
  • 2>&1 将标准错误也重定向到标准输出

2. 使用tee命令

如果需要同时查看输出和记录日志:

#!/bin/bash
/path/to/your/script.sh | tee /var/log/script.log

要同时记录标准错误:

#!/bin/bash
/path/to/your/script.sh 2>&1 | tee /var/log/script.log

3. 使用logger命令

将日志发送到系统日志(syslog):

#!/bin/bash
/path/to/your/script.sh 2>&1 | logger -t script_name

4. 高级日志记录脚本

更复杂的日志记录方案:

#!/bin/bash

LOG_FILE="/var/log/script_$(date +%Y%m%d).log"
MAX_LOG_SIZE=10485760  # 10MB
MAX_LOG_FILES=5

# 检查并轮转日志
if [ -f "$LOG_FILE" ]; then
    current_size=$(stat -c%s "$LOG_FILE")
    if [ "$current_size" -ge "$MAX_LOG_SIZE" ]; then
        # 轮转日志
        for i in $(seq $MAX_LOG_FILES -1 2); do
            if [ -f "${LOG_FILE}.$((i-1))" ]; then
                mv "${LOG_FILE}.$((i-1))" "${LOG_FILE}.$i"
            fi
        done
        mv "$LOG_FILE" "${LOG_FILE}.1"
    fi
fi

# 执行脚本并记录日志
{
    echo "=== 脚本开始于 $(date) ==="
    /path/to/your/script.sh
    echo "=== 脚本结束于 $(date) ==="
    echo "退出状态码: $?"
} >> "$LOG_FILE" 2>&1

5. 使用logrotate进行日志管理

创建/etc/logrotate.d/your_script配置文件:

/var/log/script.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd >/dev/null 2>&1 || true
    endscript
}

6. 在脚本内部记录日志

在脚本内部实现日志记录:

#!/bin/bash

# 日志函数
log() {
    local log_level=$1
    local message=$2
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[${timestamp}] [${log_level}] ${message}" >> /var/log/script.log
}

# 使用示例
log "INFO" "脚本开始执行"

# 你的代码
if [ ! -f "/path/to/file" ]; then
    log "ERROR" "文件不存在: /path/to/file"
    exit 1
fi

log "INFO" "脚本执行完成"

最佳实践建议

  1. 为日志文件设置适当的权限
  2. 实现日志轮转以防止日志文件过大
  3. 在日志中包含时间戳和日志级别
  4. 对于关键系统脚本,考虑将日志发送到远程日志服务器
  5. 定期审查和清理旧日志

选择哪种方法取决于你的具体需求,简单的重定向通常就足够了,而复杂的应用可能需要更全面的日志解决方案。