2010-08-21 8 views
2

J'ai trouvé beaucoup de références sur le web pour faire tourner les logs de nginx sous Linux. Il suffit d'envoyer le signal USR1 au processus. Mais ... les signaux Unix n'existent pas sur Windows et je n'ai pas pu trouver d'informations à ce sujet. Comment puis-je accomplir la même chose avec nginx sur Windows ??rotation de log pour nginx sur windows

Répondre

5

En fait, (malgré des tonnes de googling), la réponse peut être trouvée carrément in the doc pages.

La commande est:

nginx -s reopen 

Mais cela semble ne fonctionner que lors de l'exécution nginx de la ligne de commande – actuellement le seul moyen officiel d'exécuter nginx sur les fenêtres à cette époque.

Mon prochain défi consiste à comprendre comment faire fonctionner cette fonction lorsque nginx est exécuté en tant que service Windows, comme décrit ici: Nginx Windows Service.

+0

Ceci est le poste sur l'exécution nginx comme service windows: http://misterdai.wordpress.com/2009/10/16/nginx-windows-service/ et par la manière ça marche vraiment bien. –

0

J'ai écrit un petit utilitaire qui fait tourner les fichiers journaux après stoppig nginx (qui fonctionne sous Windows) pendant quelques secondes.

Il était nécessaire d'arrêter, puis de copier les fichiers journaux, puis de redémarrer le service à intervalles réguliers. Vous pouvez télécharger le code et le modifier comme vous le souhaitez.

code

est ici: http://mandar.tumblr.com/post/5419161330/nginx-logrotate-windows

Merci

+2

merci pour l'information - cependant, nginx est conçu pour faire tourner les logs sans s'arrêter du tout, avec le signal rouvrir (en émettant nginx -s rouvrir) - cela a été corrigé dans la version Windows il y a quelque temps. Vous pouvez envisager de réécrire votre programme pour utiliser ce mécanisme. –

1

1.Premièrement créer un fichier pour stocker votre liste de fichier journal, comme "nginx_log.lst" avec le contenu:

D: \ projects \ example.com \ data \ log \ access.log D: \ projects \ example.com \ data \ log \ error.log

2.save le foll en raison du contenu dans un fichier de chauve-souris comme « nginx_log_rotate.bat »:

@echo off 
set YMD=%date:~0,4%%date:~5,2%%date:~8,2% 
set LOG_FILE= 
FOR /F "eol=; delims=, " %%i in (nginx_log.lst) do (
    echo "%%i" 
    move "%%i" "%%i.%YMD%" 
) 
pushd C:\tools\nginx 
nginx -s reopen 
popd 
pause 
@echo on 

3. créer une tâche planifiée pour exécuter la chauve-souris que vous le souhaitez

4

Pour faire pivoter les journaux nginx dans Windows, créer un fichier batch comme celui-ci:

For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set YMD=%%c-%%a-%%b) 
move C:\path\to\nginx\logs\Access.log C:\path\to\nginx\logs\Access_%YMD%.log 
move C:\path\to\nginx\logs\Error.log C:\path\to\nginx\logs\Error_%YMD%.log 
call C:\path\to\nginx\nginx -p C:\path\to\nginx -s reopen 

cette première ligne crée juste un horodatage (crédit à Jay)

Puis créer une tâche planifiée dans Windows pour exécuter ce fichier de commandes à quel point vous souhaitez souvent faire pivoter les journaux.

Si nginx est en cours d'exécution en tant que service (par exemple par le service Windows Wrapper décrit here) vous ne pouvez pas simplement appeler des commandes nginx comme nginx -s reopen directement. Au lieu de cela, vous devez exécuter les commandes en tant qu'utilisateur sur lequel le service s'exécute.

Pour ce faire, créer un nouvel utilisateur appelé nginx (par exemple) et configurer à la fois le service et la tâche planifiée pour exécuter en tant que utilisateur.Vous devrez également vous assurer que votre utilisateur a les droits "Logon as a batch job".

Si vous voulez tester votre script de rotation sur la ligne de commande sans avoir à utiliser une tâche planifiée, vous pouvez utiliser

runas /user:nginx "C:\path\to\rotateLogs.bat" 
0

avec Windows Server 2008 R2, je crée ce fichier batch, et je le programmer un fois par jour à minuit:

@echo off 
SET DATE=%date% 
SET DAY=%DATE:~0,2% 
SET MONTH=%DATE:~3,2% 
SET YEAR=%DATE:~6,4% 
SET DATE_FRM=%YEAR%-%MONTH%-%DAY% 


ECHO %DATE_FRM% 

REM ECHO %YEAR% 
REM ECHO %MONTH% 
REM ECHO %DAY% 

move D:\nginx-1.11.1\logs\access.log D:\nginx-1.11.1\logs\access_%DATE_FRM%.log 
move D:\nginx-1.11.1\logs\error.log D:\nginx-1.11.1\logs\error_%DATE_FRM%.log 
call D:\nginx-1.11.1\nginx -p D:\nginx-1.11.1 -s reopen