2015-12-30 7 views
5

Ich möchte jede Minute einen Cronjob ausführen, um alle Dateien zu ermitteln, die in letzter Minute in einem bestimmten Verzeichnis (mit etwa 300.000 Inodes) geändert wurden, und diese Dateiliste in einen CSV zu exportieren.Cronjob zum Erkennen der zuletzt geänderten Dateien

Ist es möglich, einen optimierten Befehl auszuführen, um das zu tun? Ich kann kein "find" mit sort flag in diesem Verzeichnis ausführen, da es riesig ist und es wahrscheinlich mehr als 1 Minute dauern wird, bis alle Dateien laufen.

Gibt es einen Befehl, den ich tun kann? Oder führen Sie ein bestimmtes Programm im Hintergrund des Servers aus, der jede geänderte Datei protokolliert, wenn sie geändert wird? Wenn es einen Befehl gibt, der PHP dazu verwendet, bin ich in Ordnung, ich kann ein Cron erstellen, um ein PHP-Skript auszuführen, kein Problem.

+0

Wenn find nicht funktioniert, dann ist wahrscheinlich IO der Engpass, also ist es irrelevant, wenn Sie 'find' oder eine andere Methode verwenden, um die mtime der Dateien zu bestimmen. Konzentriere dich auf eine Methode, um deinen IO zu verbessern. – Ctx

+0

Was schreibt die Dateien? Kann es dort gemacht werden? – Martin

+1

Verwenden Sie 'incrtab'. Es funktioniert wie normale "Crontab" außer bei Dateiereignissen (z. B. einer Änderung): http://manpages.ubuntu.com/manpages/intrepid/man5/incrontab.5.html –

Antwort

2

Es gibt ein Linux-Dienstprogramm namens incron, das ähnlich wie normale Cron verwendet werden kann, aber anstatt Ereignisse auf Zeit basieren, funktionieren sie von inotify und werden von Dateiereignissen ausgelöst.

Sie können die Ubuntu Manpage finden Sie hier: http://manpages.ubuntu.com/manpages/intrepid/man5/incrontab.5.html

Ich persönlich habe nicht hatte es zu komplex für alles zu benutzen, aber es geht ungefähr so:

es installieren:

sudo apt-get install incron 

Öffnen Sie den Editor einen Eintrag hinzuzufügen:

incrontab -e 

Setzen Sie etwas wie dieses:

/var/www/myfolder IN_MODIFY curl https://www.example.com/api/file-updated/$# 

Der erste Teil ist die Datei oder Ordner zu sehen. Der zweite Teil ist das Ereignis. Und der dritte Teil ist der Befehl.

I denken, dass $# der Platzhalter für die betreffende Datei ist.

+0

Du bist großartig! :) – Samul

+0

Heh, froh, dass ich helfen konnte :-) –

+0

Das ist wirklich interessant. Vielen Dank. –