2009-04-30 5 views
5

Meine interaktive 32-Bit-Windows-Anwendung (jetzt von Delphi [Ent] 2007 zu 2009) verwendet Befehlszeileninteraktionen, um untergeordnete Prozesse zu generieren, die rechenintensive Aufgaben ausführen, die wiederum Textdateien schreiben, die die GUI-Elternanwendung analysiert und analysiert Analysen - Ergebnis ist eine interaktive grafische Darstellung der Ergebnisse.Wie Linux-Prozess von Windows-Anwendung spawn?

Ich habe Zugang zu einem Multi-Prozessor (Multi-User) Linux-Cluster (über SSH), und möchte die Schwerarbeit zu diesem Cluster entladen. Meine Frage ist, wie man die Prozesse in Linux von meiner Windows App aus spawnt. Ich kann mir vorstellen, sichere FTP zu verwenden, um Dateien abzurufen und abzurufen, aber ich bin mir nicht sicher, wie die untergeordneten Prozesse in Linux erstellt werden.

Einige Zeilen für das weitere Lesen wäre in Ordnung - aber Code/Pseudocode wäre ideal. Ich kann mir vorstellen, dass dies mehr über Windows-Linux-Interaktion als Delphi sein könnte.

Antwort

6

Wenn Sie Zugriff auf ssh haben, besteht eine Möglichkeit darin, Befehle zu erteilen. Zum Beispiel:

ssh [email protected] ls -l ~ 

wird in dem SSH-Terminal zeigen die Dateien im Home-Verzeichnis des Benutzers. Ich bin mir nicht sicher, ob du das wirklich willst. Aber es würde wahrscheinlich funktionieren.

Wenn Sie dies tun, Sie mit ziemlicher Sicherheit SSH password less logins

jedoch einrichten möchten, Eine ideale Lösung wahrscheinlich Setup ein Dämon auf dem Linux-Boxen, deren einzige Aufgabe sein würde, ist spezifisch lange laufenden Aufgaben im Hintergrund laufen und lassen Sie die Ergebnisse später holen.

+0

Ich wusste nicht über diese Art von Remote-Befehl - einfach zu versuchen, auf jeden Fall. – Argalatyr

5

Sie müssen etwas auf dem Linux-Rechner installieren, um den Prozess zu starten. Möglicherweise finden Sie eine Art von API für die Clustering- oder Batch-Job-Übermittlung, die Sie über Windows installieren und auf die Sie zugreifen können. Möglicherweise müssen Sie einen benutzerdefinierten Server codieren. Sie können möglicherweise alles über ssh ausführen, wenn Sie einen ssh-Prozess von Windows aus ausführen können und wenn Sie sshd auf der Linux-Seite installiert haben. Aber meine Präferenz würde sein, einen Webservice oder ein einfaches CGI-Skript auf der Linux-Seite zu schreiben, das entworfen wurde, um Ihre Argumente und Daten zu nehmen und das Ergebnis über ein einfaches altes http (oder https, wie es der Fall sein könnte) zurückzugeben.

So oder so wird dies mehr als nur Codierung auf der Windows-Seite umfassen.

+0

Ich stimme zu, dass dies wahrscheinlich die ideale Lösung ist, aber wie Sie vorschlagen, stellt es für mich eine etwas mehr Lernkurve dar - was auf lange Sicht eine gute Sache sein könnte! – Argalatyr

+2

+1 Die Verwendung eines benutzerdefinierten Servers hat viele Vorteile. Insbesondere können (je nach der Sprache, die zum Schreiben verwendet wird) Dinge unter Windows geschrieben und debuggt werden (lokal) und dann auf vielen verschiedenen Plattformen implementiert werden, auch ohne sshd. Wenn Sie FPC oder Mono verwenden, können Sie Ihr Pascal/Delphi-Wissen nutzen, damit Sie einen Vorsprung haben. Es hat auch den Vorteil, dass das Steuern des Prozesses und das Lesen/Schreiben von Daten den gleichen Mechanismus verwendet. Auch auf Multiprozessor-Serverknoten einfacher skalierbar. – mghie

+1

Argalatryr - Sie müssen den benutzerdefinierten Server nicht vorzeitig codieren, Sie müssen nginx oder lighttpd installieren und sie so einrichten, dass sie Ihre Worker-Anwendungen auf einem bestimmten Pfad über CGI- oder FastCGI-Schnittstelle aufrufen. Der Server würde sich darum kümmern, viele Worker-Apps auszuführen und sie zu schließen, wenn sie nicht mehr benötigt werden. Ich denke du solltest lieber nginx lernen als ssh. Wenn textbasiertes HTTP Daten aufblasen würde, unterstützt HTTP transparentes Zip/Unzip, wenn sowohl die Clientbibliothek als auch der Server in der Lage sind. –

5

Ich würde das vollständige "Putty" -Paket herunterladen.

Neben dem ausgezeichneten Secure Shell-Terminal enthält es PSCP für die sichere Übertragung von Dateien und PLINK für Remote-Ausführung von Befehlen über SSH.

Tipp: Sie müssen die vollständige Konfiguration des öffentlichen/privaten Schlüssels einrichten, damit PLINK ohne lästige Passwortabfrage funktioniert. Es gibt einen nützlichen Leitfaden http://unixwiz.net/techtips/putty-openssh.html.

+0

Ich benutze Putty aber hatte übersehen Plink - sehr hilfreich, danke. – Argalatyr