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
skript das dateiänderungen erkennt
Re: skript das dateiänderungen erkennt
In Echtzeit wirst du mit einem Script nicht weiterkommen, was genau hast du denn vor?
Gruß
Thorsten
Gruß
Thorsten
Re: skript das dateiänderungen erkennt
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
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?
Re: skript das dateiänderungen erkennt
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
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
Re: skript das dateiänderungen erkennt
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
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
Re: skript das dateiänderungen erkennt
ups...
habe ganz vergessen mich zu bedanken
für das skript ...
bin gerade dabei es auszuprobieren...
ciao Jo
habe ganz vergessen mich zu bedanken
für das skript ...
bin gerade dabei es auszuprobieren...
ciao Jo
Re: skript das dateiänderungen erkennt
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
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
-
- Posts: 189
- Joined: 08. Dec 2001 15:18
- Location: Krefeld (obwohl mir Kölsches Bier lieber ist)
- Contact:
Re: skript das dateiänderungen erkennt
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
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-->
Re: skript das dateiänderungen erkennt
jiipppi ich habs zum laufen gebracht
danke nochmal Jo
danke nochmal Jo