skript das dateiänderungen erkennt

Post Reply
Message
Author
Jochen2

skript das dateiänderungen erkennt

#1 Post by Jochen2 »

hallo,
ist es schwierig ein skript
zu bekommen oder zu schreiben, welches
ständig beobachtet ob eine oder mehrere Dateien verändert wurden, sobald eine Datei
verändert worden ist sollte ein bashbefehl ausgeführt werden. Wichtig dabei ist,
daß die Dateien nicht z.b. jede 5 min oder 3 sek. auf veränderungen geprüft werden, sondern in Echtzeit!
weiß da jemand was?
danke Jo

thorsten
Posts: 72
Joined: 23. Jan 2002 13:54

Re: skript das dateiänderungen erkennt

#2 Post by thorsten »

In Echtzeit wirst du mit einem Script nicht weiterkommen, was genau hast du denn vor?

Gruß

Thorsten

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

Re: skript das dateiänderungen erkennt

#3 Post by hjb »

Hi!

Mit Kernel 2.4 sollte so was mit File Leases gehen. Auf Freshmeat habe ich kürzlich ein (Demo?)-Programm gesehen, das dieses Feature nutzt. Ich weiß den Namen aber nicht mehr. Kenne auch auswendig keine Doku dazu. Such mal bei Google.

Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

tkortkamp
Posts: 143
Joined: 08. Apr 2001 22:56
Location: Bremen

Re: skript das dateiänderungen erkennt

#4 Post by tkortkamp »

Hi!

Man kann Verzeichnisse mit FAM in Echtzeit überwachen. Hier ist ein entsprechendes C-Programm, dass ein Verzeichniss auf Dateiveränderungen überprüft und ggf. ein Skript/Programm ausführt:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
/*
* monitor.c -- monitor arbitrary file or directory
* using fam
*/

/*
* Modified by Tobias Kortkamp
*
*
*/



#include <fam.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/select.h>

/* event_name() - return printable name of fam event code */

void checkEvent(int code, const char *filename)
{
/* Den selben Code unten kannst du mehrmals kopieren und entsprechend den Wert FAMChanged in eines der folgenden Sache ändern:
FAMChanged -- Eine Datei wurde verändert
FAMDeleted -- Eine Datei wurde gelöscht
FAMCreated -- Eine Datei wurde erstellt
FAMMoved -- Datei wurde verschoben
*/
if(code == FAMChanged) /* Eine Datei wurde verändert */
{
system("pfad/zu/bash/skript");
}
}

void main(int argc, char *argv[])
{
int i, nmon, rc, fam_fd;
FAMConnection fc;
FAMRequest *frp;
struct stat status;
FAMEvent fe;
fd_set readfds;

frp = malloc(argc * sizeof *frp);
if (!frp)
{
perror("malloc");
exit(1);
}

/* Open fam connection */

if ((FAMOpen(&fc)) < 0)
{
perror("fam");
exit(1);
}

/* Request monitoring for each program argument */
for(nmon = 0, i = 1; i < argc; i++)
{
if (stat(argv[ i], &status) < 0)
{
perror(argv[ i]);
status.st_mode = 0;
}
if((status.st_mode & S_IFMT) == S_IFDIR)
rc = FAMMonitorDirectory(&fc, argv, frp + i, NULL);
else
rc = FAMMonitorFile(&fc, argv[ i], frp + i, NULL);
if(rc < 0)
{
perror("FAMMonitor failed");
continue;
}
nmon++;
}
if(!nmon)
{
fprintf(stderr, "Nothing monitored.
");
exit(1);
}

/* Initialize select data structure */

fam_fd = FAMCONNECTION_GETFD(&fc);
FD_ZERO(&readfds);
FD_SET(fam_fd, &readfds);

/* Loop forever. */

while(1)
{
if(select(fam_fd + 1, &readfds, NULL, NULL, NULL) < 0)
{
perror("select failed");
exit(1);
}
if(FD_ISSET(fam_fd, &readfds))
{
if(FAMNextEvent(&fc, &fe) < 0)
{
perror("FAMNextEvent");
exit(1);
}
checkEvent(fe.code, fe.filename);
}
}
}
</font><hr></pre></blockquote>

Du musst dafür FAM installiert haben. Kompilieren musst du das Programm mit gcc -o monitor monitor.c -lfam
Starten tust du es dann mit ./monitor /pfad/zu/dem/zu/überwachenden/verzeichnis/ &

c ya,
Tobias
dude i'm pretty damn sure you could script somebody back to life

Jochen2

Re: skript das dateiänderungen erkennt

#5 Post by Jochen2 »

die ganze Sache soll,
für eine Backupsystem sein.
Also ich gebe ein Netzlaufwerk über
Samba frei und wenn ein benutzer
dort etwas speichert soll nach dem
speichervorgang sofort per rsync
die Datei archiviert werden...

ciao Jo

Jochen2

Re: skript das dateiänderungen erkennt

#6 Post by Jochen2 »

ups...
habe ganz vergessen mich zu bedanken
für das skript ...
bin gerade dabei es auszuprobieren...

ciao Jo

Jochen2

Re: skript das dateiänderungen erkennt

#7 Post by Jochen2 »

Ich habe auf meinem redhat 7.1
system mal die sache probiert.
Fam ist installiert.
Das Skript habe ich kompiliert
jedoch brachte er folgende Meldung:

monitor.c: In function `main':
monitor.c:37: warning: return type of `main' is not `int'

Er hat jedoch trotzdem die ausführbare Datei
monitor erstellt. Ist das normal?
Jetzt würde mich noch interessieren, wo ich den Pfad der zu überwachenden Dateien angeben muss?

danke Jo

jensemann
Posts: 189
Joined: 08. Dec 2001 15:18
Location: Krefeld (obwohl mir Kölsches Bier lieber ist)
Contact:

Re: skript das dateiänderungen erkennt

#8 Post by jensemann »

Hi

Ja das ist normal. Das ist nur warnung vom gcc. Mit gcc-3 liese sich das aber nichtmehr kompilieren.

wenn du
void main(int argc, char *argv[])

durch
int main(int argc, char *argv[])

ersetzt sollte die warnung weg sein.

Mfg jensemann
Hilfe bei LFS Problemen: <a href="http://www.lfsforum.org" target="_blank"><!--auto-->http://www.lfsforum.org</a><!--auto-->

Jochen2

Re: skript das dateiänderungen erkennt

#9 Post by Jochen2 »

jiipppi ich habs zum laufen gebracht :)

danke nochmal Jo

Post Reply