![是否可以安排一个 python 脚本在 logrotate 结束时运行?](https://linux22.com/image/628004/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%AE%89%E6%8E%92%E4%B8%80%E4%B8%AA%20python%20%E8%84%9A%E6%9C%AC%E5%9C%A8%20logrotate%20%E7%BB%93%E6%9D%9F%E6%97%B6%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我在一个不运行任何 javascript 的网站上使用 Piwik Analytics,我更愿意从访问日志而不是图像跟踪器中创建数据 - 来自日志的结果实际上更好,因为它们可以包含静态文件下载。
这是带有 Ubuntu 12.04 和 nginx 1.4.5 的 LEMP 服务器。
Python 脚本位于/var/www/example1.com/public/piwik/misc/log-analytics/import-logs.py
,需要使用多个选项运行。访问日志位于/var/www/example2.com/logs/access.log.1
。
相关部分/etc/logrotate.d/nginx
包含:
/var/www/*/logs/*.log {
daily
missingok
rotate 36500
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
postrotate
[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
endscript
}
我不知道如何集成一个 Python 脚本以便它在最后运行(旋转完成后)。
编辑:
我最初没有考虑到的另一个问题是,此脚本只需要为一个域运行 - 服务器上的其余域不需要该脚本。我创建了上面的文件,以便它会自动轮换添加到服务器的所有域的日志,而无需我编辑/etc/logrotate.d/nginx
。
答案1
您可以将要执行的命令放在postrotate
和endscript
行之间(确保该行已经存在):
postrotate
[ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid`
/usr/bin/python /var/www/example1.com/public/piwik/misc/log-analytics/import-logs.py somearguments
endscript