In questo articolo vedremo l’utilizzo di una funzionalità interessante di Windows Server, riguardante l’esecuzione di un programma eseguibile da eseguirsi ogni 5 minuti.
Realizzeremo una console application, che scriverà in un file di Log, tramite la libreria Log4net del testo in un file, che riguarderà il log.
Questo scenario si può verificare nel caso che dobbiamo eseguire dei batch, ossia operazioni costanti durante l’arco della giornata o schedulati in particolari giorni, in ambito di rete aziendale.
Gli ambiti usati in questo caso possono essere quelli bancario, finanziario ed assicurativo che fanno un grande uso dei programmi eseguiti senza interfaccia grafica ma che devono compiere operazioni quotidiane.
Creazione del programma
Dopo aver aperto Visual Studio e scelto il linguaggio di proprio interesse, selezionate come progetto, il modello “Console Application”, in questo modo sarà realizzato un eseguibile senza interfaccia grafica e quindi senza che l’utente possa interagire.
Appena creato il programma, dobbiamo aggiungere il riferimento alla libreria “Log4Net”.
Apriamo la finestra di “Gestione Pacchetti Nuget” tramite il menu di scelta rapida sul nome del progetto nella finestra di “esplora soluzioni” e nella finestra che viene aperta, digitiamo “Log4Net” ed installiamo la libreria di tipo “Apache Log4net” il tutto come mostrato in figura 1.
Figura 1 – Installazione del componente Apache Log4net
A questo punto possiamo scrivere il codice per utilizzare il log.
Nel file di configurazione, in particolare al fine di tipo “app.config”, tra il tag “<Configuration”> ed il tag “<Startup>” inseriamo il seguente codice.
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<!-- Pattern to output the caller's file name and line number -->
<conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/>
</layout>
</appender>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="LOG\LogMessaggi.log"/>
<appendToFile value="true"/>
<maximumFileSize value="1024KB"/>
<maxSizeRollBackups value="5"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender"/>
</root>
</log4net>
Ora non ci resta che passare al file denominato "module" per VB.Net o il file denominato "Programm" per C#
Inseriamo lo spazio dei nomi per utilizzare le classi della libreria Log4Net, qui di seguito si riporta il frammento di codice
VB.Net
Imports log4net C#
using log4net;
Ora scriviamo il codice, molto semplice per generare e scrivere in un file di testo, informazioni sul codice.
Qui di seguito si riporta il codice per entrambi linguaggi.
VB.Net
Module Module1
Sub Main()
Dim log As ILog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Try
log4net.Config.XmlConfigurator.Configure()
'Codice
'-------
log.Info("Testo da scrivere nel file")
Catch ex As Exception
log.Fatal("Errore: " & ex.Message)
End Try
End Sub
End Module
C#
class Program
{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
static void Main(string[] args)
{
try
{
log4net.Config.XmlConfigurator.Configure();
//Codice
//-------
log.Info("Testo da scrivere nel file");
}
catch (Exception ex)
{
log.Fatal("Errore: " + ex.Message);
}
}
}
Ora non ci resta che generare il file, preparare la cartella e copiarla sul nostro server.
Dopo aver copiato la nostra cartella con i file la rinominiamo “ScriviBatch” come riportato qui di seguito.
Figura 2 – La cartella con i file.
Ora che abbiamo copiato i file, non ci resta che creare la schedulazione ogni 5 minuti.
Apriamo utilità di pianificazione oppure per sistemi in lingua inglese “Task Scheduler”
Nel menu di destra, o dove sono presenti vari task, facciamo click con il tasto destra , nel menu che viene aperto, facciamo click sulla voce di menu “Create Task” come mostrato in figura 3. La voce “Create Basic Task” permette di avere un wizard, ossia che guida l’utente alla creazione del task.
Figura 3 – il menu per la creazione del task.
Quando si apre la finestra, dobbiamo impostare alcuni parametri per realizzare il nostro task. In particolare, il nome del task, eventualmente una descrizione, l’utenza con cui dovrà girare il task, e se eseguirlo con alti privilegi, che consigliamo di mettere la spunta, il tutto come mostrato in figura 4.
Figura 4 – La prima finestra per il taks.
Dopo aver impostato i vari campi, facciamo click sulla paginetta con la dicitura “Triggers”, nella finestra che viene aperta (figura 5) facciamo click sul pulsante “New……”
Figura 5 – La finestra per la creazione del task.
A questo punto impostiamo i campi, in particolar modo la sezione “Settings” selezionando l’opzione “Daily”, lasciando il valore nel campo “Recur Every” a 1.
Mettiamo la spunta nel campo “Repeat Task every” ed impostiamo a “5 minutes”.
A questo punto confermiamo il tutto tramite il pulsante “OK”.
Figura 6 – Impostazioni di esecuzione
Facciamo click sulla linguetta con la voce “Actions” ed anche in questo caso, facciamo click sula pulsante “New…” nella finestra che viene aperta (figura 7) tramite il pulsante con la dicitura “Browse….” Andiamo a selezionare il file eseguibile che abbiamo copiato nel server.
Figura 7 – Il file eseguibile
A questo punto lasciamo tutto com’è e confermiamo con il pulsante “Ok”.
Ora nella lista dei file da eseguire periodicamente, ci sarà anche quello che abbiamo appena creato, dove nella colonna “Next Run Time” possiamo vedere quando sarà la successiva esecuzione.
Conclusioni
L’articolo ha voluto fornire le basi per la realizzazione di un batch, ossia la possibilità di realizzare quei programmi di tipo console, che pianificati ad un certo orario e giorno, eseguono operazioni automaticamente senza ricorrere all’utilizzo dell’utente.
I batch, come definiscono in molti, sono tecniche molto usante in quei contesti lavorativi che richiedono continuamente elaborazione di dati, o invio di certe informazioni.