Question

I ai plusieurs machines esclaves et une machine maître qui fonctionnent ensemble une application distribuée. Processus sur chaque machine esclave doivent avoir une interface graphique et un accès réseau (je pense qu'il serait appelé un processus interactif alors). Pour faciliter l'utilisation, ce serait bien si la machine maître pourrait démarrer / arrêter les processus sur les machines esclaves.

Ma première idée était d'utiliser la classe WMI et le Win32_Process pour démarrer un processus à distance, mais après enquête, il a été reveiled que les processus ont commencé de cette façon ne sont pas interactifs et isolé, et ne peut donc pas l'interface graphique. Une note indique que l'on peut utiliser Win32_ScheduledJob.Create pour créer un processus interactif à distance, mais il fonctionne sous le compte LocalSystem que je voudrais éviter (aussi je ne pouvais même pas à exécuter correctement).

Quelle serait de bons moyens pour résoudre ce problème? Peut-être qu'il est possible de lancer une application d'aide qui, à son tour commence un processus approprié, mais qui semble tout à fait sale.

Edit: PsExec était vraiment maladroit quand je l'ai essayé et lent comme l'enfer (ne sais pas pourquoi). En regardant plus à PsExec il semble qu'il installe un service temporaire sur la machine distante pour lancer l'application. Serait-ce la seule façon de frayer un processus interactif en utilisant une identité propre? Dois-je inclure un service d'aide dans la configuration pour les nœuds? Mais même alors, comment pourrais-je communiquer avec elle alors?

Était-ce utile?

La solution

PsExec fait partie de la suite Sysinternals qui peut le faire

http://technet.microsoft.com/en-us/sysinternals /bb897553.aspx

Si vos serveurs sont en cours d'exécution de Windows 2008, vous pouvez également utiliser

Autres conseils

Vous pouvez utiliser la commande "à".

Ouvrez une ligne de commande et tapez

at /?

Dans le terminal. Le seul inconvénient est que le temps sur le système distant doit être dans un certain delta raisonnable de la vôtre. Il est également pas instantanée. Vous devez attendre quelques secondes pour que le programmateur à distance ne manque pas tout à fait l'événement.

Il y a un équivalent WMI à cela, et a les mêmes mises en garde de base au:

COTATION 3: Code pour créer un processus interactif sur Windows Server 2003, Windows XP et Win2K SP3 Machines

Const INTERVAL = "n"
Const MINUTES  = 1

strComputer = "compaq575"
strCommand  = "calc.exe"

Set objWMIService = _
    GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objScheduledJob = objWMIService.Get("Win32_ScheduledJob")

Set objSWbemDateTime = _
    CreateObject("WbemScripting.SWbemDateTime")
objSWbemDateTime.SetVarDate(DateAdd(INTERVAL, _
    MINUTES, Now()))

intReturnValue = objScheduledJob.Create(strCommand, _
    objSWbemDateTime.Value, False, 0, 0, True, intJobID)
WScript.Echo "Job ID: " & intJobID

Je pense que la plupart des autres façons de le faire (sans installer votre propre service) ont été rebutés par différents packs de services en raison de vulnérabilités.

Si le groupe enire est raisonnablement sous votre contrôle, il est possible de mettre en œuvre ces processus distants comme des services Windows. Un service peut être interactif (non par défaut cependant) et il peut être contrôlé à distance via la norme Service Control Manager en cours d'exécution sur chaque PC sous Windows.

Puis-je demander pourquoi les processus esclaves doivent avoir une interface graphique? J'ai un ensemble similaire, mais besoin d'une interface graphique uniquement pendant la configuration initiale.

Quoi qu'il en soit, voici ce que je l'ai fait, mais malheureusement, il repose sur le processus en cours d'exécution en tant que compte LocalSystem, que je comprends que vous essayez d'éviter, si vous avez vraiment besoin de l'interface graphique.

Pour vous donner un peu de fond, l'application que je devais distribuer était Hudson , et cela était une version antérieure où la façon dont vous le distribuer est en exécutant une application Java Web Start, et donc la nécessité d'une interface utilisateur graphique (au moins pendant la configuration, pour aider le dépannage).

Ce que j'ai été mis en place les applications esclaves que les services sur les machines esclaves en utilisant sc.exe (qui est un PITA pour obtenir le droit, heureusement que vous faites cette fois seulement). Quelque chose le long des lignes de:

sc.exe create SlaveService binPath= c:\path\to\slave.exe type= interact DisplayName= "The Slave Service"

Notez les espaces après les paramètres (binpath = etc), ceux-ci sont nécessaires. Notez aussi que je l'ai trouvé plus facile de laisser tomber le « type = interagir » et changer manuellement dans la console de service.

Ensuite, sur le maître, en utilisant également sc.exe, je commence le service à distance:

sc.exe \\slavemachine start SlaveService

Et vérifié que le programme était en cours d'exécution sur les machines esclaves.

Maintenant, dans mon cas, je ne l'ai pas vraiment besoin de l'interface graphique, autre que pour le dépannage initial. Dès que je suis arrivé tout fonctionne correctement, je configure simplement le service de fonctionner comme un compte de service, mais ne sont plus en mode interactif.

J'espère que cela utile.

Il y a quelques éléments que vous allez avoir besoin pour y arriver.

D'abord, vous aurez besoin d'un moyen de communication avec la machine distante.

Deuxièmement, vous aurez besoin de quelque chose sur l'écoute de la machine distante qui peut démarrer votre application.

Les autres suggestions ci-dessus utilisent quelque chose intégré pour un ou les deux de ces composants, ce qui est bien, tant que les restrictions de l'une des solutions données sont appropriées.

PsExec ressemble le plus prometteur, hors-the-box solution. Sinon, vous pouvez rouler votre propre application pour écouter les messages simples via TCP / canaux nommés / whatever et juste fraient sous-processus appropriés. La seule mise en garde avec qui vous voulez être assez prudent autour de la sécurité, surtout si l'une des machines sont publiquement exposées.

La suite PsTools a été développé par Sysinternals et était si grande que l'entreprise a été achetée par Microsoft quelque temps plus tard. L'utilisation de ces outils est la meilleure façon d'accomplir votre tâche.

Je vois que vous avez mentionné un problème avec l'exécution d'applications de manière interactive. Puis-je suggère d'utiliser le commutateur / i pour exécuter l'application interactive. PSTools offre toutes les fonctionnalités que vous recherchez. Vous avez juste besoin de jouer avec les commutateurs pour obtenir le résultat souhaité.

Je ne l'ai jamais connu la lenteur que vous décrivez dans mes applications qui utilisent PSTools.

MPICH2 est souvent utilisé dans les clusters de calcul haute performance et devrait être en mesure de faire ce que vous voulez. Même si vous ne l'utilisez pas pour faire passer les messages entre les machines, vous pouvez utiliser le lanceur de processus pour démarrer tous les processus en place de la machine maître. Il peut être configuré pour authentifier en tant qu'utilisateur particulier Windows sur les machines.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top