PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ereignisauslösung nach Datenübertragung



Tikonteroga
12.05.12, 14:51
Hallo,

icy such eine Lösung für folgende Problemstellung.

Über SSH/SCP werden größere Datenmengen von einem Client an einen Linux-Server übertragen. Sobald diese Daten auf den Server übertragen wurden, möchte ich diese Daten weiterverarbeiten.

Gibt es eine Möglichkeit, dass eine Konsolenanwendung automatisch ausgeführt wird, nachdem die Daten vollständig übertragen wurden?

Bei einem SVN-Server gibt es diese Hooks, mit denen sich zu bestimmten Ereignissen bestimmte Konsolenanwendungen aufrufen lassen. Gibt es einen solchen Mechanismus auch für einen SSH/SCP Server?

Vielen Dank im Voraus.

derRichard
12.05.12, 15:55
http://www.tutorials.de/netzwerke/387255-ereignisausloesung-nach-scp-datentransfer.html

//richard

Tikonteroga
12.05.12, 16:21
http://www.tutorials.de/netzwerke/387255-ereignisausloesung-nach-scp-datentransfer.html

//richard

Danke, aber diesen Beitrag kenne ich schon, da es mein eigener ist.

derRichard
12.05.12, 16:23
genau aus dem grund habe ich ihn ja gepostet.

siehe:
http://www.linux-club.de/viewtopic.php?f=38&t=76935

//richard

Tikonteroga
12.05.12, 16:36
Okay, den verlinkten Text habe ich mir durchgelesen.

Leider konnte ich durch den Eintrag im anderen Forum, mein Problem nicht lösen. Da es sich um ein Problem handelt, für dass ich beruflich einen Lösungsvorschlag machen muss, ist halt die Zeit, die ich warten kann begrenzt. Deshalb habe ich versucht einen größeren Personenkreis anzusprechen.

DrunkenFreak
12.05.12, 16:39
Genau deshalb verlinkt man solche Threads...

Skript für die Übertragung basteln und am Ende die gewünschte Aktion ausführen.

Tikonteroga
12.05.12, 16:47
Versteh ich das richtig, dass der Client dieses Skript auf dem Server ausführt ?

TheDarkRose
12.05.12, 19:59
Skript basteln:

#!/bin/bash
scp /path/file user@host:/path/file
ssh user@host command

so die einfachste version

Tikonteroga
13.05.12, 15:25
Also es gibt über 100 Clients, die Daten an den Server übertragen. Hier wäre die einfache Lösung nicht so einfach, weil ich dann von diesen Clients das Image aktualisieren müsste ...

Deshalb suche ich eine Lösung, die sich auf der Seite des Servers realisieren lässt.

derRichard
13.05.12, 15:27
Also es gibt über 100 Clients, die Daten an den Server übertragen. Hier wäre die einfache Lösung nicht so einfach, weil ich dann von diesen Clients das Image aktualisieren müsste ...

Deshalb suche ich eine Lösung, die sich auf der Seite des Servers realisieren lässt.

und warum genau geht der obige ansatz dann nicht?

//richard

DrunkenFreak
13.05.12, 16:08
Aktualisier/Lösche/Lege eine Datei am Ende der Übertragung an und überprüfe regelmäßig auf dem Server auf diese Datei. Hat sie die gewünschte Änderung erhalten, führe das Skript aus.

MiGo
13.05.12, 21:48
Alternativvorschlag:
Vielleicht lässt sich mit famd was basteln (http://en.wikipedia.org/wiki/File_alteration_monitor).

Oder du schaust per bash-Script regelmäßig in das Uploadverzeichnis, merkst dir neue Dateien und tust Dinge(tm), wenn sich deren Größe für 30 Sekunden nicht geändert hat.

Newbie314
13.05.12, 22:00
Loggt der User nach der SCP Übertragung aus ?

Wenn ja: da gab es doch Konfigurationsdateien die beim Ausloggen bestimmte Skripte starten...

Tikonteroga
13.05.12, 23:38
Also ein zyklisches Prüfen von dem Verzeichnis oder das Überwachen (inotify) würde ich eher als unschön empfinden. Ein solches Programm müsste ein Gedächtnis bzw. einen Zustandsautomat enthalten und währe deshalb schon sehr komplex und müsste permanent laufen.

Ein Programm, dass nach einem Event abläuft und nach der Abarbeitung wieder beendet wird, währe mir lieber.


Loggt der User nach der SCP Übertragung aus ?

Wenn ja: da gab es doch Konfigurationsdateien die beim Ausloggen bestimmte Skripte starten...

Das hört sich gut an. Ich werde das mal untersuchen. Danke schön.

karl-heinz-lnx
14.05.12, 09:32
Aktualisier/Lösche/Lege eine Datei am Ende der Übertragung an und überprüfe regelmäßig auf dem Server auf diese Datei. Hat sie die gewünschte Änderung erhalten, führe das Skript aus.
Ich würde diese Lösung bevorzugen. Dabei würde ich es mir einfach machen und nur eine 0 KB große Datei am Ende des Ablaufs erzeugen und im "Überwachungsskript" nur auf die Existenz dieser Datei abfragen. Da muss man sich auch nicht viel merken. Nach Verarbeitung im "Überwachungsskript", ist diese Datei dann noch zu löschen.

Tikonteroga
14.05.12, 10:27
Also ich beschreibe die Ausgangsituation zum Verständnis etwas genauer.

Es wurden von den Clients immer ein Datensatz aus zusammengehörigen Dateien in einem vorgegebenen Dateiformat an den Server übertragen. Durch eine technische Änderung am Geschäftsablauf, werden jetzt mehrere solcher Datensätze übertragen, die jedoch zusammengehören und einer sein sollten, damit sie korrekt verarbeitet werden können. Aufgrund einer technischen Notwendigkeit wurde ein Datensatz aber in mehrere Datensätze aufgesplittet.

Sobald diese Datensätze an den Server übertragen wurden, müssen die Datensätze also wieder zu einem Datensatz zusammengeführt werden.

Im Idealfall hätte ich mir erhofft, dass nach einer solchen Übertragung über einen Event-Mechanismus ein Skript auf dem Server ausgeführt werden kann, dass die Pfade der übertragenen Dateien direkt oder indirekt als Parameter übergeben bekommt und die Dateien entsprechend zusammenführt.

Bei den Clients handelt es sich um eingebettete Systeme von denen es mehrere 100 gibt. Deshalb sollten sich die Änderungen auf den Server beschränken, damit nicht für 100 Clients ein neues Image erstellt und getestet werden muss ...

nopes
14.05.12, 14:55
hmm so direct was zum thema logout script habe ich nicht gefunden, spontan noch zwei ideen dazu:
1. man kann den sftp server "überschreiben" bzw. einen anderen verwenden, dass ist z.b. notwendig, wenn man keine root logins erlaubt, aber dennoch mit root rechten in einem sftp client (z.b. winscp) arbeiten will, also anstatt den standard server startest du einen wrapper script, der kriegt mit, wenn das sftp zeugs nicht mehr gebraucht wird und tut den rest - halt ich für ein ziemlich saubere, perfomante, gute und sichere lösung - s.a. http://winscp.net/eng/docs/faq_su#use_sudo_on_login, da habe ich es kennen gerlent, und ich kann dir sagen, das geht natürlich auch mit linux clients ;)

2. kannst du natürlich einen kleinen tcp/ip dienst auf dem server einrichten, der dann vom client informiert wird, dass seine aktion durch ist, auch das halt ich versauberer als einen fsw (filesystemwatchdog)

grundsätzlich ist ein fsw aber wohl die qad lösung, also die mit dem geringsten aufwand, aber auch die mit der größten ressourcen verballerei

[edit] warum führst du nicht einfach via ssh einen befehl auf dem server aus, wenn ich so drüber nach denke, die wohl ultimative lösung, ohne viele ecken usw...

Tikonteroga
15.05.12, 07:23
[edit] warum führst du nicht einfach via ssh einen befehl auf dem server aus, wenn ich so drüber nach denke, die wohl ultimative lösung, ohne viele ecken usw...

Meinst du jetzt mich als Admin oder den Client ?

nopes
15.05.12, 09:43
beides denkbar, client hätte aber doch das problem mit den images, wenn ich es richtig verstanden habe.

aber auf dem server wirst du ja raus finden können, welchen sftp server die clients auf dem server starten, diesen auf einen von dir erstellten wrapper skript umbiegen, dann kriegst du immerhin mit, wenn ein session beendet worden ist und kannst dann das verzeichnis bzw. die dateien untersuchen.

vielleicht nicht ganz so schön, sollte aber klappen.

Tikonteroga
15.05.12, 12:48
Hallo,

das hört sich schonmal gut an. Vielen Dank für den Vorschlag. Ich gebe das mal an die Person weiter, die das etwas besser bewerten kann als ich.