PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eventsteuerung



lutz29_de
07-06-2005, 12:54
Hallo

ich bräuchte mal ein Script oder eine Eventsteuerung, die neu per FTP angekommene Dateien sofort in eine anderes Verzeichnis verschiebt; wg. Weiterverarbeitung.

Gibt es da was im Linux-Standard oder geht das nur mit 'sleep' in einem Script?

lutz

quinte17
07-06-2005, 14:08
at oder cron können dir hierbei behilflich sein...
(einen cronjob anlegen der alle 5 mins läuft..)

greetz

lutz29_de
07-06-2005, 16:04
das ist natürlich das Naheliegendste; werde ich wahrscheinlich auch damit realisieren.

Aber sowas wie ein watchdog, der auf Verzeichnisgrößenänderung o.ä. reagiert und dann ereignisgesteuert was startet, wäre auch nicht schlecht.

Vielleicht fühlt sich ein Linux-Freak mit viel Zeit dazu berufen, etwas in der Art mal zu schreiben ;-)

klewan
07-06-2005, 16:50
#define _GNU_SOURCE

#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>


static void handler(int signo, siginfo_t * si, void * data) {
int i;
if(signo == SIGRTMIN) {
printf("Some action on: %d FD\n", si->si_fd);
printf("Re-Scan Dir and compare with stored linked listed to find new one out");
}

}

int main(int argc, char ** argv) {
int fd;
int r;
struct sigaction sa;

fd=open(argv[1], O_RDONLY);
if(fd == -1) {
perror("open");
exit(1);
}
r = fcntl(fd, F_NOTIFY, DN_CREATE | DN_MULTISHOT);
if(r == -1) {
perror("fcntl");
exit(1);
}

sa.sa_sigaction = handler;

sa.sa_flags = SA_SIGINFO;
r = sigaction(SIGRTMIN, &sa, NULL);
if(r == -1) {
perror("sigaction");
exit(1);
}

r = fcntl(fd, F_SETSIG, SIGRTMIN);
if(r == -1) {
perror("fcntl");
exit(1);
}
while(1) {

usleep(200);
}



}




brauchste nur noch in der main einmal eine readdir machen und ned linked liste anlegen und im handler dann beim notify (DN_CREATE) nochmal readdir und mit der liste vergleichen um das neue file zu erkennen

das ganze lässt de in ner endlos schleife laufen und hast nen event basierten dir-keeper *fg* :-)

michael.sprick
07-06-2005, 19:17
wenn der FTP Server so konfigueriert ist, dass er beim disconnect einen Meldung ausgibt, z. B. irgendwas aus einer textdatei liest, dann kannst Du das auch über einen FIFO machen... dazu erstellst Du die einfach ein neues Device in /dev, von dem Du die Meldung liest.
Dahinter hängt ein Skript, was die Meldung dann in wirklichkeit ausgibt und sonst noch jede Menge Dinge erledigt....