GNU/Linux >> Linux の 問題 >  >> Linux

ファイルがダウンロードされたことを検出することは可能ですか?

別のスクリプトが毎日ファイルをsFTPしてダウンロードするサーバーがあります。

質問: ファイルがダウンロードされたことを検出し、ダウンロードが完了した後にファイルを自動的にアーカイブすることはできますか?

明確にするために–私たちはファイルをホストし、他の誰かが来てそれをダウンロードします。

これは彼らが使用するスクリプトです:

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

承認された回答:

解決策を提供する可能性があると私が考えることができる3つの方法があります。

1。カスタムsftpサブシステム

sftp-serverをラップすることができます sshd_config経由のデーモン 独自のスクリプトで「オーバーライド」して、sftp-serverを傍受する可能性があります が実行していて、ファイルがダウンロードされたことを確認したときに動作します。デフォルトのsftp-serverをオーバーライドする sshd_configで 簡単です:

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

ラッパースクリプトで何をするかを理解するのは難しい部分です。/usr/local/bin/sftp-server

#!/bin/sh

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

2。ログを見る

sftp-severのデバッグを有効にした場合 ファイルがSFTPサーバーに対して開かれている/閉じられているとき、および読み取り/書き込みされているときのログを表示するように取得できます。これらのログを監視し、必要に応じてファイルをバックアップするデーモン/スクリプトを作成できます。これを実現する方法の詳細については、このU&L Q&Aタイル:SFTPのアクティビティログレベルと、このブログ投稿「SFTPファイル転送セッションアクティビティログ」への回答ですでに部分的に説明されています。

SFTPログは、次のように拡張できます。

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]

次に、オープン/クローズイベントペアのログを監視するデーモン/スクリプトを開発する必要があります。これらは、完了したファイル転送を表します。また、syslogを使用して、「CLOSE」ログイベントを監視し、転送されたファイルのコピーを実行することもできます。

3。インクロ

ファイルにアクセスするたびにLinuxカーネルが生成するInotifyイベントを利用できます。 Cronと同様に機能するIncronというサービスがあります。 Cronが時間に基づいて機能するのに対し、Incronはファイルイベントに基づいて機能します。したがって、SFTPアップロードディレクトリを監視するIncronエントリを設定し、特定のファイルイベントが検出されたら、ファイルをコピーすることができます。

関連:Windowsでvmdkファイルを参照しますか?

さまざまなイベントの説明については、inotifyのmanページをご覧ください。 read()を監視したいと思います (IN_ACCESS )の後にclose()が続きます (IN_CLOSE_WRITE )。これらは、SFTPサーバーからコピーされたファイル用です。

Incronのルールは次のようになります:

<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

この記事のタイトル:Linux incrond inotify:ディレクトリの変更を監視してアクションを実行するこのオプションを試してみる場合は、必要な詳細の詳細が表示されます。


Linux
  1. `find -exec Sh -c`を安全に使用することは可能ですか?

  2. Zipファイルのエンコード?

  3. 実行可能ファイルがない場合

  1. .tar.gz ファイルの作成時にディレクトリを除外する

  2. wget:ダウンロードしたファイル名

  3. BIOS で VT-X がオンになっているかどうかを検出する方法は?

  1. ファイルはいつ作成されましたか?

  2. ファイルが開いているVim/tmuxを見つけることは可能ですか?

  3. .fuse_hidden* ファイルを削除するには?