高俊峰的《高性能linux服务器构建实战》中提到一个nginx的日志分割脚本

#!/bin/bash
savepath_log='/home/nginx/logs'
nglogs='/opt/nginx/logs'
mkdir -p $saveptah_logs/$(data +%Y)/$(date +%m)
mv $nglogs/access.log $savepath_log/$(data +%Y)/$(date +%m)/access.$(date +%Y%m%d).log
mv $nglogs/error.log  $savepath_log/$(data +%Y)/$(date +%m)/error.$(date +%Y%m%d).log
kill -USR1 `cat /opt/nginx/logs/nginx.pid`

脚本很简单,但是最后一行kill 的 -USR1 没有见过,kill -l 看了一下,-USR1 等于 kill -10,是用户定义的进程信号,在维基百科中查到:

USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

从脚本可以看出,当执行脚本时,会把access.log和error.log移到日志目录,所以原来nginx的logs目录下就没有access.log和error.log了,作者使用kill -USR1 nginx.pid 重新平滑的生成了这两个日志文件,简单说等于nginx -s reload.

参考文章:
http://zh.wikipedia.org/wiki/SIGUSR1%E5%92%8CSIGUSR2
《高性能linux服务器构建实战》 高俊峰 Page 18