Sto scrivendo uno script batch in PowerShell v1 che verrà pianificato per l'esecuzione diciamo una volta ogni minuto. Inevitabilmente, arriverà un momento in cui il lavoro ha bisogno di più di 1 minuto per essere completato e ora abbiamo due istanze dello script in esecuzione, e quindi forse 3, ecc ...Assicurare solo 1 istanza di PowerShell Script è in esecuzione in un dato momento
Voglio evitare questo avendo lo script controlla se c'è già un'istanza di se stesso in esecuzione e, in tal caso, lo script termina.
Ho fatto questo in altre lingue su Linux ma non l'ho mai fatto su Windows con PowerShell.
Per esempio in PHP che posso fare qualcosa di simile:
exec("ps auxwww|grep mybatchscript.php|grep -v grep", $output);
if($output){exit;}
C'è qualcosa di simile in PowerShell v1? Non ho ancora incontrato nulla di simile.
Di questi modelli comuni, quale ha più senso con uno script PowerShell eseguito frequentemente?
- File Lock
- OS Utilità di pianificazione
- ciclo infinito con un intervallo di sonno
Come stai pianificando esso? Se stai utilizzando l'Utilità di pianificazione, hai un'opzione sotto Impostazioni: "Se l'attività è già in esecuzione, si applica la seguente regola: Non avviare una nuova istanza". –
Bene, è facile. Posso usare l'Utilità di pianificazione o creare un file di blocco, che sembra del tutto inutile se il sistema operativo è in grado di gestirlo. – Slinky