Sommario
Il presente articolo mostra come risolvere il problema del mancato avvio del servizio di Bravo Engine (o degli altri servizi di Bravo Manufacturing) dopo l'avvio/riavvio pianificato o accidentale (ad es. dopo l'interruzione dell'energia elettrica) del server su cui è installato Bravo.
Sintomi
In fase di apertura di Bravo Desktop o di Bravo Kiosk si riceve il messaggio di errore che indica che non è stato trovato alcun file di licenza.
Nel caso del Bravo Kiosk Web o del componente Bravo MES il messaggio di errore mostra l'impossibilità a raggiungere il sito.
Cause
In alcune occasioni si è avuto modo di osservare che il servizio di Bravo Engine risulta "Arrestato" in quanto non si è avviato in automatico dopo l'avvio del server su cui Bravo Manufacturing è installato.
La causa principale di quanto sopra descritto è che il servizio Bravo Engine per potersi avviare correttamente ha necessità di alcune informazioni memorizzate nel database di Bravo; quindi se il servizio Bravo Engine si avvia prima che il servizio di Microsoft SQL Server sia correttamente avviato e funzionate, non riesce a reperire le informazioni di cui ha bisogno con conseguente fallimento dell'avvio del servizio.
La corretta sequenza di avvio dei servizi è dunque la seguente:
Si ricorda che è possibile verificare il corretto avvio dei servizi di Microsoft SQL Server e Bravo Manufacturing anche dalla maschera dei Servizi di Windows.
Soluzioni
Se il problema si è verificato in modo occasionale, è possibile avviare manualmente (rispettando la corretta sequenza di avvio dei servizi) il servizio Bravo Engine e/o gli altri servizi di Bravo Manufacturing (Bravo Alleantia Poller, Bravo Spool Optimizer e Bravo Alarms Spooler) seguendo le indicazioni contenute nell'articolo La configurazione del database e dei servizi di Bravo Manufacturing.
Se invece il problema si verifica in modo sistematico ossia in occasione di ogni avvio/riavvio del server in cui è installato Bravo, è possibile impostare delle dipendenze tra i vari servizi in modo da rispettare la corretta sequenza di avvio dei servizi.
Le dipendenze tra servizi consigliate per gestire al meglio tale casista è riassunta nel prospetto seguente:
Come possiamo individuare il nome di un servizio?
I servizi di Bravo Manufacturing hanno nomi ben definiti e noti. il nome del servizio di SQL Server invece può essere diverso in ciascuna installazione, pertanto è necessario individuarlo.
Conoscere il nome del servizio è fondamentale per potere seguire le istruzioni da "prompt dei comandi" che verranno analizzate nei prossimi paragrafi del presente articolo.
Per determinare il nome di un servizio, occorre:
- aprire la maschera dei "Servizi" che si trova in [Programmi>Strumenti di amministrazione Windows>Servizi]
- selezionare il servizio che si desidera controllare, premere il tasto destro del mouse e scegliere la voce "Proprietà"
- nella scheda che si apre selezionare la scheda "Generale" e controllare il nome del servizio
Come possiamo verificare le dipendenze presenti su un servizio?
Per verificare direttamente da interfaccia grafica le dipendenze impostate in un servizio, è sufficiente:
- aprire la maschera dei "Servizi" che si trova in [Programmi>Strumenti di amministrazione Windows>Servizi]
- selezionare il servizio che si desidera controllare, premere il tasto destro del mouse e scegliere la voce "Proprietà"
- nella scheda che si apre selezionare la scheda "Relazioni di dipendenza" e controllare le dipendenze presenti
In alternativa è possibile verificare le dipendenze impostate in un servizio, da "Prompt dei comandi", per farlo è necessario:
- aprire il "Promt dei comandi" con i diritti di amministratore
- eseguire il comando
"sc qc" + "nome del servizio da controllare"
in pratica:
- per il servizio Bravo Engine, digitare "sc qc BravoEngine"
- per il servizio Bravo Alarms Spooler, digitare "sc qc BravoAlarmsSpooler"
- per il servizio Bravo Alleantia Poller, digitare "sc qc BravoAlleantiaPoller"
- per il servizio Bravo Spool Optimizer, digitare "sc qc BravoSpoolOptimizer"
- per il servizio SQL server, digitare "sc qc MSSQLSERVER" (se il nome del servizio è MSSQLSERVER)
Nota: digitare i comandi sopra indicati senza virgolette e rispettando spazi e Maiuscole/minuscole in quanto il comando è "case sensitive"
Come è possibile impostare manualmente le dipendenze tra i servizi?
E' possibile impostare una dipendenza in un servizio direttamente da "Prompt dei comandi" (aperto con i diritti di amministratore) eseguendo il comando:
"sc config" + "nome del servizio" + "depend=" + "nome del servizio da cui dipende"
Nota: digitare i comandi sopra indicati senza virgolette e rispettando spazi e Maiuscole/minuscole in quanto il comando è "case sensitive"
Dipendenze del Bravo Engine
Per il servizio Bravo Engine occorre creare una dipendenza dal servizio di SQL server.
Nei paragrafi precedenti, si è già avuto modo di affermare che il nome del servizio SQL server non è fisso e determinato ma varia in base all'installazione quindi occorre individuarlo.
Una volta che si è individuato il nome del servizio di SQL Serve (ad es. MSSQLSERVER), per assegnare una dipendenza è necessario:
- aprire il "Promt dei comandi" con i diritti di amministratore
- eseguire il comando "sc config BravoEngine depend=MSSQLSERVER" (se il nome del servizio è MSSQLSERVER)
- una volta eseguito il comando, si consiglia di verificare il buon esito dell'operazione eseguita verificando lo stato della dipendenza del servizio, con i comando "sc qc BravoEngine"
Dipendenze del Bravo Alarms Spooler, Bravo Alleantia Poller e Bravo Spool Optimizer
Per i servizi Bravo Alarms Spooler, Bravo Alleantia Poller e Bravo Spool Optimizer occorre creare una dipendenza dal servizio Bravo Engine.
In qs caso il nome dei servizi sono fissi e ben noti, quindi i comandi da digitare sono determinati e di seguito indicati:
- per il servizio Bravo Alarms Spooler ==> "sc config BravoAlarmsSpooler depend=BravoEngine"
- per il servizio Bravo Alleantia Poller ==> "sc config BravoAlleantiaPoller depend=BravoEngine"
- per il servizio Bravo Spool Optimizer ==> "sc config BravoSpoolOptimizer depend=BravoEngine"
Nota: nell'immagine sopra si vede l'esecuzione del comando per la creazione delle dipendenza per il servizio Bravo Alarms Spooler ed il comando per la verifica delle dipendenza dello stesso servizio.
Esiste un tool per impostare automaticamente le dipendenze tra i servizi per il corretto funzionamento di Bravo Manufacturing?
Come visto nei paragrafi precedenti, le operazioni da eseguire per impostare le corrette dipendenze tra servizi sono operazioni semplici e ripetitive; è possibile quindi automatizzarle con l'esecuzione di un file batch (file .bat) che si trova in allegato a questo articolo.
Prima di eseguire il comando BATè necessario individuare il nome del servizio SQL server e lanciare il comando batch da prompt dei comandi specificando come parametro il nome del servizio stesso, in pratica occorre:
- Chiudere Bravo Manufactiring ed arrestare tutti i servizi di Bravo ed aprire il "Promt dei comandi" con i diritti di amministratore
- posizionarsi nella cartella che contiene il file dipendenze.bat (ad es C:\Appoggio) con il comando "cd C:\Appoggio" (senza virgolette)
- eseguire il comando "dipendenze MSSQLSERVER" (se il nome del servizio è MSSQLSERVER)
- per ogni servizio, vengo eseguite 3 operazioni:
- verifica della situazione di partenza della dipendenza del servizio
- impostazione della corretta dipendenza del servizio
- verifica della corretta applicazione della dipendenza del servizio
Si consiglia di verificare che tutte le operazioni abbiano impostato le corrette dipendenze come indicato nei paragrafi sopra indicati.
Approfondimento
Nei paragrafi precedenti si è visto come verificare la dipendenza di un servizio e come impostarne una nuova; si potrebbe però avere anche la necessità di fare manutenzione alle dipendenze già esistenti tra i vari servizi.
Ad esempio, se il comando di assegnazione dipendenze viene ripetuto più volte (anche con nomi servizi diversi), il comando sovrascrive la precedente assegnazione e non l'aggiunge.
Se si desidera invece aggiungere più dipendenze, occorre eseguire il comando:
"sc config ServizioA depend= ServizioB/ServizioC/ServizioD"
In questo caso, il ServizioA non si avvierà finché ServizioB, ServizioC e ServizioD non saranno tutti avviati. Se un qualunque servizio tra ServizioB, ServizioC o ServizioD viene arrestato, il ServizioA verrà arrestato automaticamente.
Qualora si avesse necessità di rimuovere tutte le dipendenze da un servizio, è possibile eseguire il comando:
"sc config ServizioA depend= /"
Alla luce delle dipendenze tra servizi, cosa accade se un servizio viene arrestato o avviato?
Quando si avvia o si arresta un servizio, il sistema agisce anche sui servizi collegati partendo dallo stato in cui si trova il servizio da cui dipende.
Nel grafico sotto riportato si vedono le conseguenze sui vari servizi che derivano dalle azioni fatte sugli altri servizi in ottemperanza alle dipendenze impostate.
Se si avvia un servizio che dipende da un altro servizio (ad es. Bravo Alarm Spoller), se il servizio da cui dipende (ad es. Bravo Engine) è fermo, lo stesso viene avviato. Identica cosa avviene se si avvia il servizio Bravo Engine che ha una dipendenza da SQL server.
Se si arresta un servizio che ha dei servizi che dipendono da lui (ad es. SQL server), se il servizio dipendente è avviato (ad es. Bravo Engine), lo stesso viene fermato. Identica cosa avviene se si ferma il servizio Bravo Engine che fornisce una dipendenza al servizio Bravo Alarm Spoller.
Se si riavvia un servizio che ha dei servizi che dipendono da lui (ad es. SQL server), se il servizio dipendente è avviato (ad es. Bravo Engine), lo stesso viene fermato e riavviato. Identica cosa avviene se si riavvia il servizio Bravo Engine che fornisce una dipendenza al servizio Bravo Alarm Spoller.
Cosa accade quando Bravo Manufacturing viene aggiornato ad una nuova versione?
Quando l'installazione di Bravo Manufacturing viene aggiornata ad una nuova release del prodotto, le dipendenze tra servizi vengono rimosse, pertanto è necessario re-impostarle seguendo le operazioni sopra descritte, come se non fossero mai state applicate in precedenza.
Commenti