Aktion ausführen wenn Dateien vorhanden sind ...

Message
Author
User avatar
Stormbringer
Posts: 1570
Joined: 11. Jan 2001 11:01
Location: Ruhrgebiet

Aktion ausführen wenn Dateien vorhanden sind ...

#1 Post by Stormbringer »

Hallo,

vielleicht kann mir nochmals jemand helfen.
Wie muß ein Skript aussehen, welches alle 5 Minuten per cron aufgerufen wird, und Dateien per FTP Verbindung verschicken soll, wenn denn welche vorhanden sind?
Ich nehme an, es geht mit irgendwelchen if Abfragen .... da ich aber kein coder bin, habe ich mit so etwas massive Probleme ...

Das Shellskript heißt transfer.sh (da läuft noch mehr ab), das zu kontrollierende Verzeichnis /FTS/DATEN/21
Einen .netrc EIntrag habe ich erstellt, die Anmeldung funzt einwandfrei.

Danke & Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)

ratte

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#2 Post by ratte »

geht wohl um cron seinen job, wenn ich das richtig ueberflogen habe.

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
# alle 5 minuten wonderboy ausfuehren
*/5 * * * * /path/to/wonderboy
</font><hr></pre></blockquote>

ansonsten hilft 'man crontab' immens, selbst, wenn man kein Programmierer ist...

ratte

User avatar
Stormbringer
Posts: 1570
Joined: 11. Jan 2001 11:01
Location: Ruhrgebiet

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#3 Post by Stormbringer »

Hallo ratte,

das mit dem cron Job war mir bekannt ... trotzdem Danke!

Es geht mir aber aber um den Aufbau der Datei, die per crontab aufgerufen wird.
Denn es soll ja nur eine Verbindung aufgebaut werden, wenn Dateien im Verzeichnis /FTS/DATEN/21 vorhanden sind.
Sprich:
- crontab startet alle 5 Minuten das Skript transfer.sh
- stellt das dann gestartete Skript transfer.sh fest, daß sich Dateien in /FTS/DATEN/21 vorhanden sind, sollen diese übertragen werden
- sind keine Daten vorhanden, passiert gar nichts

Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)

Jochen

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#4 Post by Jochen »

Nun, wenn Daten vorhanden sind, wird ein "ls" sie sicherlich anzeigen, nicht wahr?
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#!/bin/bash
PATH=/bin:/usr/bin:/usr/local/bin
DATADIR=/FTS/DATEN/21
if [[ $(ls $DATA_DIR | wc -l) -gt 0 ]] ; then
ftp ....
fi
exit 0
</font><hr></pre></blockquote>In der .netrc kannst Du über <pre>macdef init</pre> ein Makro definieren, das automatisch bei einem Auto-Login ausgeführt wird. Dort kommt dann einfach ein <pre>bin
prompt
mput *
bye</pre>rein. Keine Leerzeilen dazwischen, denn mit der ersten Leerzeile endet das Makro. (Das [<!--no-->pre<!--no-->]-Tag schmeisst da leider in der Darstellung Leerzeilen rein.)

Jochen

User avatar
Stormbringer
Posts: 1570
Joined: 11. Jan 2001 11:01
Location: Ruhrgebiet

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#5 Post by Stormbringer »

Hallo Jochen,

vielen Dank!! Die .netrc besteht schon .. es sind dort einige Machinen angegeben, u. a. zum download von NAI AV Definitionen.

Das mit dem Skript werde ich später einmal probieren.

Danke & Gruß
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)

Jochen

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#6 Post by Jochen »

Und wenn Du kein Makro über die .netrc verwenden willst, lässt sich der ftp auch über ein Here-Skript fernsteuern:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
ftp zielrechner.de <<EOF
prompt
bin
mput *
bye
EOF
# Und hier geht das Shellskript weiter, da EOF das Here-Skript abschliesst
# (muss das gleiche Wort wie nach den << sein).
</font><hr></pre></blockquote>

Jochen

Andreas B.

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#7 Post by Andreas B. »

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
if [ -x /path/to/file ]; then ...
</font><hr></pre></blockquote>

Jochen

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#8 Post by Jochen »

@Andreas B.: Schön und gut, wenn der Name des einen zu übertragenden Files feststeht. Was aber, wenn a) der Dateiname variabel und b) mehr als eine einzelne Datei zu übertragen sind?

Jochen

Andreas B.

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#9 Post by Andreas B. »

zu 1.
das sollte ein via Pseudocode

Variable := ls -l | suchmirallenicht(d und/oder l) attribute nur die Dateinamen bitte
die Variable enthaelt dann z.B.
file1
file2
file3

fuer n := 1 to maxlines(Variable) do
{
resultat == resultat + $(echo -x $( echo $Variable | sucheZeile nummer(n) ))
}
.. ;) nur eine kleine idee, sich selbsterzeugender Code, die Umsetzung als Script wuerde ich persoenlich mit TCL machen, aber das ist
Geschmackssache, man laesst den Code den man braucht zur Laufzeit selbst erzeugen und evaluiert ihn dann sollte in bash auch gehen,


zu 2. :)
if [ -x /path/to/file -x /path/to/file -x /path/to/file ]; then

gibt noch weitere Trigger ... -a -r ...

btw.. man muss auch verhindern das Dateien die z.B. durch Ihre Groesse langsamer geschrieben werden nicht in dem Zustand kopiert werden,
denn sonst gibt`s Datenfetzen.

Andreas B.

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#10 Post by Andreas B. »

btw die Dateinamen kann man rausschneiden via cut einfach die Spaltenenden und Anfaenge

ratte

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#11 Post by ratte »

@Andreas B.

Ich will deine tcl-script Befaehigung ja nicht mindern, aber IMHO wuerde ich fuer solche einfachen Aufgaben die default shell beauftragen.

Sicher ist die shell nicht soooo einfach zu programmieren, aber wozu 3rd-party software belangen, wenn es mit dem login-bordmittel vollkommen ausreicht?

Ist natuerlich Ansichtssache und ich nutze z.b. zum Kernel konfigurieren make menuconfig (verwendet tcl und ncurses) und kein make config, aber bei solchen Sachen ist die Linux Praeambel: "keep it simple, keep it short" doch geradezu vordergruendig, findest du nicht?

ratte

Andreas B.

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#12 Post by Andreas B. »

ich sagte auch Geschmackssache,
"keep it simple, keep it short", jup rekursiv wäre noch ne Möglichkeit ;D
die runtime code evaluation müsste auch in sh gehen nur TCL hat den Vorteil das alles
als Liste verwaltet wird, das macht viele Dinge wesentlich einfacher.

F. Tp

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#13 Post by F. Tp »

Aufgabenstellung war:

Wie muß ein Skript aussehen, welches alle 5 Minuten per cron aufgerufen wird, und Dateien per FTP Verbindung verschicken soll, wenn denn welche vorhanden sind?


Das ist doch wirklich einfach, also ich verschicke einfach die Dateien, na und wenn keine da sind werden auch keine verschickt (oder gibt es irgendwelche Tricks, um auch nicht existierende Dateien zu verschicken?).
Nun, wenn ich ein Packet verschicke, ist es hier weg und hoffentlich bald irgendwo anders, am günstigsten dort, wo ich es hinschicken wollte. Dateien werden aber im Gegensatz zu Packeten oft kopiert ...
Vielleicht sollte es einfach nur gut aussehen, das Script.

User avatar
Stormbringer
Posts: 1570
Joined: 11. Jan 2001 11:01
Location: Ruhrgebiet

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#14 Post by Stormbringer »

Hallo Jochen,

wenn ich das von Dir aufgezeichnete Skript starte, erscheint folgende Meldung:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
./check_file.sh: syntax error at line 5: `(' unexpected
</font><hr></pre></blockquote>

Die Nutzung des "here Skripts" funzt ebenfalls nicht - es wird trotzdem nach einem Benutzernamen/Password gefragt.

Gruß
Last edited by Stormbringer on 27. May 2003 9:41, edited 1 time in total.
Continuum Hierarchy Supervisor:
You have already been assimilated.
(Rechtschreibungsreformverweigerer!)

Jochen

Re: Aktion ausführen wenn Dateien vorhanden sind ...

#15 Post by Jochen »

Tscha... Ich hab den Code gerade mal mittels Copy'n'Paste übernommen und nur den Inhalt von DATADIR... ARGH!

Wenn man "DATADIR" setzt, sollte man es auch benutzen, statt plötzlich "DATA_DIR" zu verwenden. (Man beachte den überflüssigen Unterstrich.) Das wäre also Bug 1; der geht auf meine Kappe. Ansonsten habe ich das Skript aber wirklich per Cut'n'Paste übernommen, vor das ftp ein echo gestellt und DATADIR zu Testzwecken auf "/bin" gesetzt. Funzt einwandfrei. Wenn sich die Shell über ein unerwartetes "(" beschwert, könnte

<li> das $ davor fehlen oder ein Blank zwischen $ und ( stehen,
<li> die Conditional Expression "[[ ... ]]" einen Tappfehler aufweisen,
<li> das if-Statement falsch gebildet worden sein?

Alles weisst darauf hin, dass Bug 2 auf Deine Kappe geht. Damit wären wir ja wieder ausgeglichen... <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Jochen

Post Reply