用systemd timer配置每日凌晨自动安全基线巡检更可靠,需将巡检脚本封装为service单元并配timer单元,通过journal统一记录日志,支持补执行、防并发及精准排错。

直接用 systemd timer 配置每日凌晨自动执行安全基线巡检任务,比 cron 更可靠、易排查、可追溯。关键在于把“巡检脚本”封装为 service,再用 timer 控制触发时间,全程由系统日志统一记录。
准备巡检脚本并确保可执行
把你的安全基线检查逻辑写成一个独立脚本,例如 /usr/local/bin/security-audit.sh:
- 开头加
#!/bin/bash,并赋予执行权限:sudo chmod +x /usr/local/bin/security-audit.sh - 脚本内建议输出明确日志,比如
echo "$(date): Starting security audit" >> /var/log/security-audit.log - 避免依赖交互或未定义环境变量;如需特定 PATH 或用户权限,在 .service 文件中显式指定
创建 service 单元:定义“做什么”
新建文件:/etc/systemd/system/security-audit.service
[Unit] Description=Security Baseline Audit After=network.target <p>[Service] Type=oneshot User=root ExecStart=/usr/local/bin/security-audit.sh StandardOutput=journal StandardError=journal</p>
-
Type=oneshot表示脚本运行完即退出,适合一次性巡检任务 -
User=root确保有足够权限读取系统配置、审计日志等关键路径 -
StandardOutput/StandardError=journal让所有输出自动进 journalctl,无需手动重定向
创建 timer 单元:定义“每天凌晨几点执行”
新建文件:/etc/systemd/system/security-audit.timer
[Unit] Description=Run security audit daily at 3:00 AM Requires=security-audit.service <p>[Timer] OnCalendar=<em>-</em>-* 03:00:00 Persistent=true RandomizedDelaySec=60</p><p>[Install] WantedBy=timers.target</p>
-
OnCalendar=*-*-* 03:00:00表示每天凌晨 3 点整触发(支持更细粒度,如Mon,Wed,Fri *-*-* 03:00:00) -
Persistent=true保证主机若在 3:00 关机,重启后会立即补执行一次,避免漏检 -
RandomizedDelaySec=60防止多台同类服务器在同一秒发起大量检查,减轻 I/O 压力
启用并验证定时器
依次执行以下命令:
-
sudo systemctl daemon-reload—— 重新加载单元配置 -
sudo systemctl enable --now security-audit.timer—— 启用开机自启并立即启动 -
systemctl list-timers --all | grep security—— 查看下次触发时间与状态 -
journalctl -u security-audit.service -n 20 -f—— 实时跟踪最近 20 行执行日志
如果脚本首次运行失败,journalctl 会清晰显示报错行和退出码,比 cron 的静默失败更容易定位。











