GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich zu erkennen, wann eine Datei heruntergeladen wurde?

Wir haben einen Server, auf dem ein anderes Skript täglich sFTPs sendet und Dateien herunterlädt.

Frage: Ist es möglich zu erkennen, dass die Datei heruntergeladen wurde, und ich die Datei dann automatisch archivieren kann, nachdem sie fertig sind?

Zur Verdeutlichung – Wir hosten die Dateien und jemand anderes kommt und lädt sie herunter.

Dies ist das Skript, das sie verwenden:

let $command = 'sftp -b /usr/tmp/file.sftp [email protected]'
show 'FTP command is ' $command
call system using $command #status

##file.sftp##

# Set local directory on PeopleSoft server
lcd /var/tmp
# Set remote directory on the remote server
cd ar/in
# Transfer all remote files to PeopleSoft
get file.dat
get file2.dat
# quit the session
bye

Akzeptierte Antwort:

Ich kann mir 3 Möglichkeiten vorstellen, die Ihnen eine Lösung bieten könnten.

1. Benutzerdefiniertes sftp-Subsystem

Sie könnten den sftp-server umschließen Daemon über sshd_config und "überschreiben" Sie es mit Ihrem eigenen Skript, das dann welchen sftp-server abfangen könnte tut, und handeln Sie dann, wenn Sie sehen, dass eine Datei heruntergeladen wurde. Überschreiben des standardmäßigen sftp-server in sshd_config ist einfach:

Subsystem       sftp    /usr/local/bin/sftp-server

Herauszufinden, was im Wrapper-Skript zu tun ist, wäre der schwierige Teil. In /usr/local/bin/sftp-server :

#!/bin/sh

# ...do something...
chroot /my/secret/stuff /usr/libexec/openssh/sftp-server
# ...do something...

2. Sehen Sie sich die Protokolle an

Wenn Sie das Debugging von sftp-sever aufdrehen Sie können es dazu bringen, Protokolle darüber anzuzeigen, wann Dateien geöffnet/geschlossen und auf/von dem SFTP-Server gelesen/geschrieben werden. Sie könnten einen Daemon/Skript schreiben, der diese Protokolle überwacht und die Datei dann bei Bedarf sichert. Weitere Einzelheiten dazu, wie Sie dies erreichen können, sind bereits teilweise in meiner Antwort auf diese U&L-Fragen und Antworten mit dem Titel „Aktivitätsprotokollierungsebene in SFTP“ sowie hier in diesem Blog-Beitrag mit dem Titel „Protokollierung der Sitzungsaktivität für SFTP-Dateiübertragungen“ behandelt.

Die SFTP-Protokolle können so erweitert werden, dass sie wie folgt aussehen:

Sep 16 16:07:19 localhost sftpd-wrapper[4471]: user sftp1 session start from 172.16.221.1
Sep 16 16:07:19 localhost sftp-server[4472]: session opened for local user sftp1 from [172.16.221.1]
Sep 16 16:07:40 localhost sftp-server[4472]: opendir "/home/sftp1"
Sep 16 16:07:40 localhost sftp-server[4472]: closedir "/home/sftp1"
Sep 16 16:07:46 localhost sftp-server[4472]: open "/home/sftp1/transactions.xml" flags WRITE,CREATE,TRUNCATE mode 0644
Sep 16 16:07:51 localhost sftp-server[4472]: close "/home/sftp1/transactions.xml" bytes read 0 written 192062308
Sep 16 16:07:54 localhost sftp-server[4472]: session closed for local user sftp1 from [172.16.221.1]

Sie müssten dann einen Daemon/Skript entwickeln, der die Protokolle auf die Ereignispaare „Öffnen/Schließen“ überwacht. Diese stellen eine abgeschlossene Dateiübertragung dar. Sie könnten auch Syslog verwenden, das die „CLOSE“-Protokollereignisse überwachen und zum Kopieren der übertragenen Dateien verwendet werden könnte.

3. Incron

Sie könnten Inotify-Ereignisse verwenden, die der Linux-Kernel bei jedem Zugriff auf eine Datei erzeugt. Es gibt einen Dienst namens Incron, der ähnlich wie Cron funktioniert. Wo Cron auf Zeit basiert, arbeitet Incron auf Dateiereignissen. Sie könnten also einen Incron-Eintrag einrichten, der Ihre SFTP-Upload-Verzeichnisse überwacht, und jedes Mal, wenn ein bestimmtes Dateiereignis erkannt wird, die Datei kopieren.

Verwandt:vmdk-Datei in Windows durchsuchen?

Werfen Sie einen Blick auf die Manpage von inotify, um eine Beschreibung der verschiedenen Ereignisse zu erhalten. Ich glaube, Sie sollten auf ein read() achten (IN_ACCESS ) gefolgt von einem close() (IN_CLOSE_WRITE ). Diese wären für Dateien, die vom SFTP-Server kopiert wurden.

Incron-Regeln sehen so aus:

<directory> <file change mask> <command or action>  options
/var/www/html IN_CREATE /root/scripts/backup.sh
/sales IN_DELETE /root/scripts/sync.sh
/var/named/chroot/var/master IN_CREATE,IN_ATTRIB,IN_MODIFY /sbin/rndc reload

Dieser Artikel mit dem Titel:Linux incrond inotify:Verzeichnisse auf Änderungen überwachen und Maßnahmen ergreifen zeigt viel mehr Details, die erforderlich sind, wenn Sie versuchen möchten, diese Option zu verwenden.


Linux
  1. Wann wurde die Datei erstellt?

  2. Kodierung einer Zip-Datei?

  3. Ist es möglich herauszufinden, in welchem ​​Vim/tmux die Datei geöffnet ist?

  4. Wie analysiere ich die Core-Dump-Datei eines Programms mit GDB, wenn sie Befehlszeilenparameter enthält?

  5. Ist es möglich, / in einem Dateinamen zu verwenden?

Apricity OS wurde eingestellt!

Linux Mint 19 wurde veröffentlicht [und es ist großartig]

wget:Name der heruntergeladenen Datei

mkdir -p schlägt fehl, wenn ein Verzeichnis vorhanden ist

Wie kann ich feststellen, ob VT-X im BIOS aktiviert wurde?

Wie lösche ich .fuse_hidden*-Dateien?