PG WORKSHOP

Automatiserede "tasks" med logning

Når man har oprettede en række nyttige scripts og disse skal afvikles med en bestemt frekvens, kan man oprette en "Scheduled task" på UNIX baserede systemer et "cron job".

Et scheduled task kan afvikles på et bestemt klokkeslet hver dag, hver time, hver søndag eller hvad der er meningsfuldt. Hvis det er en replikering af E&M data vil der være hensigtsmæssigt at lægge et "scheduled task" umiddelbart efter opdateringen.

Logging af scripts

Det er særdeles vigtigt at logge hændelserne i automatiserede scripts så det er muligt at finde frem til fejl o.lign.

Der er mange måder at logge afviklingen af scripts.Det følgende er et eksempel på, hvorledes det kan gøres i Windows.

Logfiler med timestamp i filnavn

Når man har mange scripts, der afvikles jævnligt bliver det hrutigt uoverskueligt med mange logfiler i fil bibliotek.

Derfor er det vigtigt at filnavnene har et navn med dato og tid så det er let at finde den seneste logfil og fra hviklet program logfilen stammer fra.

Nedenstående er et et simplet eksempel på et generelt logging script, som kan bruges til skrive logfiler for de fleste andre scripts.


@echo off
SET LOGDIR=D:\scripts\emdb2pg\logs\
REM Show usage and quit if no file name was given

IF [%1]==[] GOTO USAGE

rem cut off fractional seconds
set t=%time:~0,8%
rem replace colons with dashes
set t=%t::=-%
echo %t%
set t=%t: =0%
echo %t%
REM output to the user the actual  command that is run
echo RUNNING "%1   > %LOGDIR%%1_%date:~-4%_%date:~0,2%_%date:~3,2%_%t%.log 2>&1

REM Run the command
%1  > %LOGDIR%%1_%date:~-4%_%date:~0,2%_%date:~3,2%_%t%.log 2>&1


REM Show usage
:USAGE
echo DESCRIPTION: Redirects stdout from program to timestamped logfile prefixed with program name

program name
echo USAGE: %0 "<CMD script to be xlogged>"
echo EXAMPLE: %0 em2pg.cmd
echo EXAMPLE OUTPUT: em2pg.cmd_2014_13_11_21-50-14.log

Afvikling af logscript fra kommandolinjen

Loggingprogrammet køres således fra kommandolinjen:

log_job.cmd <navnet på det script, som skal logges>

Afvikling af logscript fra kommandolinjen som en scheduled task

Når scripts er testet og fungerer efter hensigten, konfigureres det til at afvikles i Windows' "Scheduled tasks". Giv "tasken" et sigende navn.

Alt text

Husk at checke af i "Run whether user is logged in or not.". Derudover er det vigtigt, at den bruger der skal afvikle "tasken" på, har rettighed til at afvikle "scheduled tasksk". Hvis det er en domæne bruger, snak da med din IT-administrator.

Dernæst skal der opsættes en "action", som starter logging scriptet, hvor det optionelle argument er navnet på det script, som skal logges fra. Endelig skal der angives en sti til scriptet (em2pg.cmd), der skal afvikles (start in (optional))

Alt text

Log rotation

Hvis man ikke ønsker at harddisken stille og rolig fyldes op med logfiler, kan man slette dem automatisk f.eks. efter 31 dage.

Følgende lille script sletter logfiler ældre end 31 dage. Indsæt i fil f.eks. delet_old_logfieles.bat


%SYSTEMROOT%\System32\forfiles.exe -p "C:\logsfolder" -s -m *.log -d -31 -c "cmd /c del @path"

Konfigurér som scheduled task som ovenfor