Actuellement sur notre ferme Citrix nous avons un soucis avec certains serveurs, en effet le service Citrix IMA (Citrix Independent Management Architecture) est arrêté après un redémarrage alors que le mode de démarrage du service est automatique.
Dans les événements Application on trouve une erreur id 1224 contenant ceci : Une erreur s’est produite lors du démarrage des services de gestion d’utilisation d’UC Citrix et d’optimisation de mémoire virtuelle Citrix. Ces services dépendent du service IMA qui a besoin d’une licence.
Après une rapide recherche sur Internet, il semble que le problème soit connu chez Citrix depuis Décembre 2013 : http://support.citrix.com/article/CTX139225
Pour résoudre ce problème, il faut vérifier l’état de la stratégie ordinateur qui s’applique aux serveurs Citrix, et regarder quel est le mode du Niveau du serveur de gestion UC.
Dans notre cas nous voulions activer le partage de l’UC via Citrix, nous avons donc vérifié comme expliqué dans l’article support du Citrix que le service DFSS est activé. En effet c’est soit le partage d’UC Microsoft DFSS uniquement, soit celui de Citrix uniquement qui doit être activé.
Pour vérifier que le DFSS est actif aller dans la base de registre et vérifier la valeur de la clé EnableCpuQuota qui se trouve dans HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System
Si elle est à 0(désactivé) si à 1(activé).
Dans notre cas le service DFSS est activé, deux solutions s’offrent à nous, soit modifier cette clé de registre sur tout les serveurs Citrix, soit appliquer une GPO sur tout les serveurs Citrix.
Pour la GPO, solution retenue, il faut aller comme ci dessous et activer la fonction:
Après un GPUPDATE /FORCE et deux reboot, le problème est résolu.
MAJ 04/02/2015:
il semblerait que le problème soit toujours là mais moins fréquent. Afin de ne pas avoir des utilisateurs bloqués le matin nous avons créé une tâche planifié qui lance un script powershell afin de vérifier si le service est démarré et dans le cas contraire, le démarre.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Version 2 " & 'C:\Scripts\IMASeviceCheck.ps1'"
# Script : ImaServiceCheck # Version : 1.2 # # Rôle : Le script verifie que le service CitrixIMA est en cours de fonctionnement. Si ce n'est pas le cas il envoie un mail et tente un démarrage # Périmètre: Serveurs Citrix $ver = $host | select version if ($ver.Version.Major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"} Set-location $home clear $service = 'IMAService' $serviceinfo = Get-Service $service $LogPath = "C:\Logs\LogIMAServiceCheck.txt" $hostname = Get-Content env:computername $from = $hostname +" <admin@exemple.fr>" for ($service) { #Verifier si le service est arreté if ($serviceinfo.Status -eq 'Stopped') { #récupération de la date pour le fichier de log $a = Get-Date -Format "dd'/'MM'/'yyyy HH':'mm':'ss" # creation d'un fichier de log s'il n'existe pas et y insérer la date et l'état arreté du service Write-Host "Le service $service est arrete" Add-Content $LogPath "$a Le service $service est arrete" # Alerte par mail $subject = $hostname + " Alerte! Le service Citrix IMA service n'est pas demarre" $body = "Le service <Citrix Independent Management Architecture> est arrete sur " + $hostname + ". Une tentative de demarrage va être lance. Merci de faire une verification manuelle du bon demarrage du service." send-mailmessage -to "Mail Admin <admin@exemple.fr>" -from $from -SmtpServer exchange.exemple.fr -subject $subject -Body $body #Demarrage du service Write-Host "Demarrage du service $service en cours..." Add-Content $LogPath "$a Demarrage du service $service en cours..." Start-Service $service break } else { if ($serviceinfo.Status -eq 'Running') { #Notification sur le fichier de Log, service déja déémarré $a = Get-Date -Format "dd'/'MM'/'yyyy HH':'mm':'ss" Write-Host "Le service $service est deja en cours d'execution" Add-Content $LogPath "$a Le service $service est deja en cours d'execution" break exit } else{ #Notification sur le fichier de Log, service inexistant $a = Get-Date -Format "dd'/'MM'/'yyyy HH':'mm':'ss" Write-Host "Le service $service est introuvable" Add-Content $LogPath "$a Le service $service est introuvable : envoi d'une alerte par mail" break } } break } #Temporisation 10secondes avant verification sleep 10 #reverif $serviceinfo = Get-Service $service for ($service) { if ($serviceinfo.Status -eq 'Stopped') { $a = Get-Date -Format "dd'/'MM'/'yyyy HH':'mm':'ss" Write-Host "Echec du demarrage du service $service" Add-Content $LogPath "$a Echec du demarrage du service $service" } else{ $a = Get-Date -Format "dd'/'MM'/'yyyy HH':'mm':'ss" Write-Host "Verification : Le service $service est en cours d'execution" Add-Content $LogPath "$a Verification : Le service $service est en cours d'execution" } break }