• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Linux: Geht das (mit "Bordmitteln")?

zoiX

Administrator
Mitglied seit
07.04.2002
Beiträge
31.636
Reaktionen
13.826
Ich hab vor ein paar Wochen den Job als Babysitters des kleinen Linuxservers in unserem Arbeitskreis "gewonnen".Bin scheinbar derjenige im AK, der am wenigsten zwei linke Hände hat am PC - mit Linux hab ich allerdings wahrlich wenig Erfahrung.

Der ist eigentlich auch nicht für viel anderes da, als als Fileserver und alles was ich tun müsste ist ihn regelmässig auf Updates checken und ggf. mal neu booten - mach ich auch brav.

Soviel zu den äußeren Umständen - nun packte mich aber etwas der Eifer. Bei uns fällt naturgemäß (wir sind ca. 20 Doktoranden, Diplomanden, Bachelor und Master in einem Labor für org. Chemie) relativ viel (nicht viel Speicherplatz, viele Dateien und Ordner) Datenvolumen in Form von spektroskopischen Daten an. Die Aufnahme dieser Daten erledigt die Analytikabteilung hier im Haus - d. h. wir bringen unsere Probe zu denen und einige Zeit später taucht auf ihrem FTP-Server ein Datensatz in Form eines Ordners auf.

Diesen ist auf den ersten Blick (also am Ordnernamen) nicht anzusehen, was drinsteckt - also um wessen Spektrum und um welche Experimentnummer es sich handelt. Vielmehr sind die Ordnernamen praktisch laufende Nummern, und wir müssen jedesmal auf den Aufträgen nachsehen, welchem Experiment die Analytik welche lfd. Nummer zugeordnet hat. In einem jeden dieser Ordner gibt es aber eine Datei, die den Namen des Auftraggebers und die vom Auftraggeber vergebene Probenbezeichnung enthält.

Nun würde ich gerne folgendes umsetzen:
1. Der Linux-Server überwacht den FTP-Server unserer Analytikabteilung dahingehend, ob neue Ordner erstellt werden
2. Wenn ein neuer Ordner erstellt wird, kopiert er ihn in ein Verzeichnis auf dem Share, wobei jedem Mitarbeiter ein Verzeichnis zugeordnet wird, so dass Mitarbeiter A seine Spektren in Ordner A findet und Mitarbeiter B seine in Ordner B.
3. Außerdem soll der Datensatz an sich umbenannt werden, so dass an dessen Namen erkennbar ist, um welche Probe es sich handelt.

Ich hab versucht, mich etwas in Bash-Scripte einzulesen und bin von meinen ersten Recherchen relativ optimistisch gestimmt, hab es aber bisher nicht geschafft, mich detailierter zu informieren. Wäre nett, wenn mich hier jemand auf die richtige Fährte führen könnte, damit ich nicht gerade den gesamten, riesigen Informationsberg durchforsten muss (um am Ende vllt. zu merken, dass es doch nicht geht...)

Das für mich im Moment größte Problem stellt die Überwachung des FTP-Servers nach der Erstellung neuer Ordner dar - alles, was danach kommt ist eigentlich ja 'nur' "Suche in Datei x nach dem Namen des Mitarbeiters und verschiebe in entsprechenden Ordner" und "Such in Datei x nach der Bezeichnung der Probe und bennene den Ordner entsprechend um".
 

Shihatsu

Administrator
Mitglied seit
26.09.2001
Beiträge
49.672
Reaktionen
10.267
Ganz schnell und dreckig: Kleiner Daemon checkt täglich per wget das zu überwachende verzeichnis des ftps und und speichert sich das als liste_$(date +%Y%m%d. liste_datum wird dann mit liste_datum(-1) verglichen (comm -2 -3 <(sort liste_datum) <(sort listedatum-1) > neueliste_$(date +%Y%m%d), neue liste wird dann an wget übergeben, der kopiert dann.
 

zoiX

Administrator
Mitglied seit
07.04.2002
Beiträge
31.636
Reaktionen
13.826
Hm....Täglich wäre zu selten (natürlich immernoch besser als der Stand jetzt), alle 20 Minuten lässt sich das aber ja sicher auch realisieren.
Das beste wäre allerdings immer dann, wenn ein neuer Ordner erstellt wird praktisch "on demand" diesen zu verschieben und umzubenennen. So ne Art Dateisystemüberwachung...
 
Mitglied seit
10.08.2000
Beiträge
12.908
Reaktionen
1
Was Shi gesagt hat, notfalls halt alle 10 Minuten laufen lassen. Ist ja nur eine kleine Anfrage, d.h. traffic wird da nicht nennenswert erzeugt, sollte np sein das alle paar Minuten auszuführen.
Dann genau wie du es gesagt hast die Datei auslesen und entsprechend das Ding einsortieren.
 
Mitglied seit
21.08.2010
Beiträge
8.010
Reaktionen
1.107
ganz easy:
1) du liest dich ein in cron und die kunst des cronjob erstellens
2) bashskript ist okay, imho sauberer/einfacher geht es in ruby/python/whatever

das skript lässt du dann eben vom cron alle halbe stunde durchlaufen und gut ist. inhaltlich kannst du quasi beliebige sachen dadrin machen. die archive entzippen, sortieren, in bestimmte ordner packen, ordner erstellen ... die möglichkeiten sind ziemlich unbegrenzt.

ps: für python gibt's als paket ftplib
 
Mitglied seit
21.08.2010
Beiträge
8.010
Reaktionen
1.107
naja, alle X Minuten ein dir-listing zu holen und dann reagieren reicht ja.
 
Mitglied seit
15.05.2003
Beiträge
11.307
Reaktionen
8
Ort
Fortuna 1895 Düsseldorf
sind die dateinamen/ ordernamen denn vorhersehbar und damit eindeutig zu identfizieren, wem bzw welchem mitarbeiter sie zugeordnet werden können?

wenn ja könnte das relativ simpel mit find erledigt werden, wenn du nur files suchst, dann änderst du -type in f statt d um. vorher auf jeden fall mal gründlich manpage lesen und mit testdaten testen ;)

Code:
find /ftp_dir -type d -name MITARBEITER_KUERZEL -exec mv -t /MIT/ARBEITER/SHARE {} \+
 
Zuletzt bearbeitet:

zoiX

Administrator
Mitglied seit
07.04.2002
Beiträge
31.636
Reaktionen
13.826
Ne, den Ordnern ist vorher nicht anzusehen, zu welchem Mitarbeiter sie gehören.
Die haben so klingende Namen wie 26x4a023.13, lässt sich wie folgt auflösen:

26 - Kalenderwoche
x - Platzhalter
4 - Spektrometeridentifikation (es stehen verschiedene Geräte zur Messung zur Verfügung)
a - Probenlauf
023 - lfd. Nummer innerhalb des Probenlaufes
.13 - Jahr

Kein Hinweis auf den Mitarbeiter also.
Innerhalb des Ordners befinden sich die gemessenen Experimente zu jeder Probe als Unterordner. Dabei ist immer ein Ordner "10" vorhanden (die zugehörige Messung wird einfach immer durchgeführt, unabhängig vom Auftrag). In den Unterordnern befinden sich die Daten zur Messung und halt (wiederum etwas in weiteren Ordnern versteckt -.-) eine Datei namens 'title' - und da (und nur da) steht drin, welcher Mitarbeiter die Messung in Auftrag gegeben hat und wie der Auftrag hieß.
 
Mitglied seit
02.09.2002
Beiträge
3.281
Reaktionen
106
Jo, machste 3 Verzeichnisse: byId, byTitle, byAuthor.
byId ist einfach ein Mirror des FTP Servers und in byTitle und byAuthor haste Symlinks, die du aus der title-Datei erstellst und die auf das jeweilige byId Verzeichnis verweisen.
Tadaa?
 
Mitglied seit
17.08.2000
Beiträge
3.105
Reaktionen
0
Steht der FTP-Server im Haus? Dänn wäre ein Zugriff via SCP vielleicht einfacher. Ändert an der Problemstellung aber wohl nicht viel ;)

Wie greifen die User auf ihre Shares zu? Mit dem Windows Explorer auf einen Samba-Share oder arbeiten die auch mit Linux?

Ein vielleicht anderer Ansatz:
Du kopierst jeweils sämtliche Ordner vom FTP Share auf deinen Fileserver (Duplikate überspringen), damit sollten nur neue Ordner '26x4a023.13' heruntergeladen werden.

Dann durchsuchst du den neuen Ordner '26x4a023.13' (die Frage ist, wie du neu heruntergeladene Ordner ermittelst, z.B. wenn mehr als einer erstellt wurde. Inotify vielleicht?) nach deiner Datei 'title', erstellst beim ermittelten Benutzer einen Ordner mit dem selben Namen und verschiebst den Inhalt dahin.
Somit sollte ein leerer Ordner '26x4a023.13' in deinem Download-Ordner zurückbleiben und beim nächsten FTP Check übersprungen werden.

kA ob's klappt :deliver:
 

zoiX

Administrator
Mitglied seit
07.04.2002
Beiträge
31.636
Reaktionen
13.826
Habs jetzt in python geschrieben. Tolle Sprache, muss ich sagen :)

Er holt sich eine Liste aller Spektren, die er bereits kopiert hat, kopiert alle, die er noch nicht kopiert hat und sortiert sie nach Benutzern. Dabei erkennt er Tippfehler unserer Analytikabteilung (bei den Benutzernamen), merkt sie sich und vergisst sie wieder, wenn sich herausstellt, dass die Schreibweise, die er für richtig hält doch die falsche ist (Szenario: Mitarbeiter "Müller" gibt seine erste Probe ab, die Analytik vertippt sich und schreibt "Müllre" - mein Script kriegt das zweite seiner Spektren in die Hand, wo er plötzlich "Müller" heißt und hält das Ganze für nen Tippfehler - darum landet das Spektrum in "Müllre". Beim dritten Spektrum heißter aber auch wieder "Müller"...Script sieht, dass es mehr 'falsche' als 'richtige' Namen gibt, bennent den Ordner des Mitarbeiters um und vergisst den Fehler.)

Das Ganze rödelt gerade über unseren Archivordner, wenn's damit funktioniert lass ich ihn auf den ftp los und dann bliebe nur noch der Cronjob anzulegen :deliver:

Danke für eure Hilfe, Ideen und Anregungen :Prost:
 

zoiX

Administrator
Mitglied seit
07.04.2002
Beiträge
31.636
Reaktionen
13.826
Okay, es gibt doch noch zwei Probleme, von denen ich nicht weiß, wo sie herkommen:

1) Manchmal rennt das Script in einen IOError:
Code:
  File "NMR_Gans_1.3.1.py", line 240, in <module>
    new_spectra = [x for x in os.listdir(source_dir) if x not in known_spectra]
OSError: [Errno 5] Input/output error: './ftp_NMR'
Komischerweise funktioniert es meistens, wenn ich das Ganze gleich danach nochmal starte...

2) Und das ist für mich noch etwas rätselhafter, weil es auch nicht systematisch auftritt:
Hin und wieder stolpert er über einen Datensatz, bei dem er meckert, er hätte keine Zugriffsrechte auf die schonmal angesprochene Datei 'title'. Sieht dann wie folgt aus:
Code:
    1. Found: 34x3a010.13
       Resolving user and experiment failed for ./ftp_NMR/34x3a010.13: [Errno 13] Permission denied: './ftp_NMR/34x3a010.13/10/pdata/1/title'
Entsprechend kann er natürlich den Mitarbeiter nicht rausfinden und die ganze Sache funktioniert nicht. Wie dem auch sei, wenn ich händisch aus dem Terminal heraus mit sudo nano [Pfad] die Datei öffne klappt das einwandfrei. Und natürlich führ' ich das Script auch als su aus, also mit den selben Rechten (zumindest in meiner Welt).

./ftp_NMR/ ist der FTP aus der Analytik, hab ihn mit curlftpfs ins Dateisystem eingebunden.
 
Mitglied seit
02.09.2002
Beiträge
3.281
Reaktionen
106
Tjoa, würde mal vermuten, dass der Fehler bei curlftpfs liegt.
 

zoiX

Administrator
Mitglied seit
07.04.2002
Beiträge
31.636
Reaktionen
13.826
Ich geb ihm jetzt einfach für jeden Zugriff auf den Server mehrere Versuche. Das ignoriert zwar das zugrunde liegende Problem, scheint aber zu funktionieren...
 
Oben