web-dev-qa-db-ja.com

logrotateの最後に実行するようにpythonスクリプトをスケジュールすることは可能ですか?

JavaScriptを実行していないサイトでPiwikAnalyticsを使用していますが、イメージトラッカーからではなく、アクセスログからデータを作成したいと考えています。ログからの結果は、静的ファイルのダウンロードを含めることができるため、実際には優れています。

これは、Ubuntu12.04とnginx1.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スクリプトを統合して、この最後に(ローテーションが完了した後に)実行されるようにする方法がわかりません。

編集:

私が最初に考慮しなかった追加の問題は、このスクリプトを1つのドメインに対してのみ実行する必要があることです。サーバー上の残りのドメインは、スクリプトを必要としません。上記のファイルは、/etc/logrotate.d/nginxを編集しなくても、サーバーに追加されたすべてのドメインのログを自動的にローテーションするように作成しました。

1
Paul

実行したいコマンドを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
3
Teun Vink