ShellDevOps脚本
日志轮转不要只靠 rm
应用日志应交给 logrotate 控制大小、保留天数和压缩节奏。服务支持重新打开日志文件时,用 postrotate 发送 HUP;否则需要确认服务自己的日志轮转策略。
/var/log/myapp/*.log {
daily
rotate 14
compress
missingok
notifempty
postrotate
systemctl kill -s HUP myapp.service >/dev/null 2>&1 || true
endscript
}续期与健康检查
certbot 的 deploy hook 只在证书真正更新后执行,适合 reload Nginx;不要把 reload 放在每次定时任务后面。
certbot renew --deploy-hook 'systemctl reload nginx'
curl --fail --silent --show-error \
--max-time 5 https://example.com/healthz- 脚本开头用
set -euo pipefail,但要明确处理允许失败的命令。 - 健康检查应返回非 2xx 即失败,
curl --fail会做到这一点。 - 生产脚本写绝对路径,并把 stdout/stderr 交给 systemd 或集中日志。
定时任务的退出码和日志比“有没有执行”更重要;失败应被监控系统采集,而不是只写到无人查看的临时文件。
先在 staging 演练证书续期和日志轮转,尤其确认 reload 是否会影响长连接或正在进行的上传。