不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

一、通用日志查看命令

1. 查看 systemd 服务日志(最常用)

# 实时跟踪 crond 服务日志
journalctl -u crond -f

# 查看 crond 最近 5 分钟日志
journalctl -u crond --since "5 minutes ago"

# 查看指定时间范围日志
journalctl -u crond --since "2025-12-12 15:30:00" --until "2025-12-12 15:40:00"

# 显示日志中包含 "PAM" 或 "error" 的行(忽略大小写)
journalctl -u crond | grep -i "pam\|error\|denied"

适用于:systemd 管理的服务(如 crond、sshd、nginx 等)
-u 指定 unit,-f 类似 tail -f


2. 查看传统 syslog 日志(部分系统仍使用)

# 查看 /var/log/cron(RHEL/CentOS 专用 cron 日志)
cat /var/log/cron
tail -f /var/log/cron
grep "PAM" /var/log/cron

# 查看系统通用日志
cat /var/log/messages
grep "crond" /var/log/messages

# 查看安全相关日志
cat /var/log/secure
grep "PAM" /var/log/secure

注意:在使用 systemd-journald 的系统中,/var/log/cron 可能不存在或为空,优先用 journalctl


二、PAM 相关日志排查

1. 启用 PAM 调试(临时)

编辑 /etc/pam.d/crond,在模块后加 debug 参数(需模块支持):

auth required pam_unix.so debug

然后重启 crond,日志会输出更详细信息(通常在 /var/log/secure 或 journal 中)。

生产环境慎用,可能泄露敏感信息。

2. 搜索所有 PAM 错误

# 在 journal 中搜索
journalctl | grep -i "pam.*error\|pam_parse"

# 在传统日志中搜索
grep -i "pam" /var/log/secure
grep -i "pam" /var/log/messages

三、cron 任务执行日志

1. 确认 cron 是否执行了任务

# 查看 crond 启动的 CMD 记录
journalctl -u crond | grep "CMD"

# 示例输出:
# CROND[12345]: (root) CMD (/opt/nubosh/vmsec-host/bin/health_monitor.sh ...)

2. 检查用户级 cron 日志(如有)

# 查看 root 用户的 cron 任务
crontab -l -u root

# 查看其他用户的 cron(需权限)
crontab -l -u username

注:任务是否“成功执行”还需检查脚本自身日志(如 /opt/nubosh/.../*.log


四、系统级日志工具对比

命令适用系统特点
journalctl systemd 系统(CentOS 7+/RHEL 7+/Ubuntu 16.04+) 结构化日志,支持时间/服务过滤
cat /var/log/messages SysVinit 或兼容系统 通用系统日志
cat /var/log/secure RHEL/CentOS 系列 记录认证、sudo、SSH、PAM 等安全事件
cat /var/log/cron RHEL/CentOS 专用于 cron 任务记录(若 rsyslog 配置启用)
dmesg 所有 Linux 内核环形缓冲日志,用于硬件/驱动问题

五、实用组合命令(推荐收藏)

# 1. 实时监控 cron 的 PAM 错误
journalctl -u crond -f | grep -i "pam\|error"

# 2. 查看最近 10 条 cron 相关日志
journalctl -u crond -n 10

# 3. 导出 cron 日志到文件供分析
journalctl -u crond --since today > /tmp/crond.log

# 4. 同时查看多个关键词(PAM、denied、fail)
journalctl -u crond | grep -E -i "pam|denied|fail|error"

# 5. 查看某进程 ID 的日志(从错误日志中提取 PID 后使用)
journalctl _PID=738995

六、国产操作系统注意事项

麒麟、凝思、统信 UOS、中科方德 等国产 Linux 中:

  • 默认使用 systemd,优先用 journalctl
  • /var/log/secure 通常存在,记录 PAM 认证日志
  • 部分系统禁用 rsyslog,导致 /var/log/cron 为空 → 必须依赖 journalctl
  • 安全代理软件(如 nubosh)可能自建日志目录,例如:
    ls /opt/nubosh/vmsec-host/logs/
    

总结:排查 cron + PAM 问题的日志命令清单

# 1. 主日志(首选)
journalctl -u crond -f

# 2. 安全日志(辅助)
grep -i "pam" /var/log/secure

# 3. 传统 cron 日志(如有)
tail -f /var/log/cron

# 4. 精准过滤错误
journalctl -u crond --since "5 min ago" | grep -i "pam.*error\|permission denied"

# 5. 验证任务是否触发
journalctl -u crond | grep "CMD.*health_monitor"

掌握这些命令,可快速定位 cron 不执行、PAM 报错、权限拒绝等常见问题。