Debug di uno script batch quando usato nel task scheduler.

Problema: ho creato un file batch che ogni tot ore svuota delle cartelle su un drive di rete mappato sotto Windows 2003 Server. Se mandato in run manualmente lo script esegue il compito in maniera egregia, se invece lo si avvia tramite task scheduler qualcosa fallisce.

Il log dello scheduler non è sufficiente a risolvere il mistero (il batch viene lanciato correttamente quindi il file è accessibile e l’utente di riferimento ha tutti i diritti per eseguirlo) ma l’azione non viene compiuta (le cartelle rimangono piene).

Come uscire dal problema?

Create un ulteriore file batch (debug.bat) da avviare tramite schedulazione e scrivete al suo interno queste istruzioni:

echo [%date% - %time%] Log start > C:\log.txt
CALL "C:\my_real_script.bat" >> C:\log.txt 2>&1

Sostituite my_real_script.bat con lo script che non vi funziona ed eseguite tramite schedulazione debug.bat

In log.txt avrete sia l’elenco delle azioni eseguite (lette in my_real_script.bat) che le eventuali risposte di errore da parte del sistema operativo. Il trucco sta in quel 2>&1 che redireziona l’output sul file.

E adesso, se volete sapere perché il mio script non andava, la risposta è semplice: Windows non ha accesso ai drive mappati quando esegue un’azione chiamata dallo scheduler (vi ricordo che lo script funziona benone se lanciato manualmente) e risponde con “The system cannot find the path specified.” in quanto il mapping dei drive viene effettuato solo per l’utente corrente.
Per risolvere il mio problema, nello script batch, ho dovuto usare la path UNC del tipo \\ip-address\folder_name.

Emanuele

2 commenti » Scrivi un commento

  1. E se debug.bat non funziona e non mi bastano i log? Creo un debugdebug.bat?
    😉 scherzo ovviamente.
    Ad ogni modo buona idea.

    Per fare la punta:
    “Il trucco sta in quel 2>&1 che redireziona l’output sul file.” – redireziona l’error output nello standard output…

    • Se avessi scritto “lo redireziona nello standard output” come giustamente segnali, qualcuno avrebbe chiesto “e dove lo ritrovo?” Volevo essere il meno accademico possibile.
      Ciao,
      Emanuele

Lascia un commento

I campi richiesti sono marcati con *.


Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.