ファイルがいつダウンロードされたかを検出できますか?

ファイルがいつダウンロードされたかを検出できますか?

他のスクリプトがSFTPを実行し、毎日ファイルをダウンロードするサーバーがあります。

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

明らかに、私たちはファイルをホストし、他の人はファイルをダウンロードします。

彼らが使用するスクリプトは次のとおりです。

let $command = 'sftp -b /usr/tmp/file.sftp someuser@myserver'
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

ベストアンサー1

私はあなたに解決策を提供する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-severSFTPサーバーにファイルの開/閉じおよびファイルの読み取り/書き込みログを表示させることができます。デーモン/スクリプトを作成してこれらのログを監視し、必要に応じてファイルをバックアップできます。これを達成する方法の詳細は、この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]

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

3. イギリスクローナ

使用できる通知するファイルにアクセスするたびにLinuxカーネルによって生成されるイベント。というサービスがあります。イギリスクローナ動作原理はCronに似ています。 Cronは時間に基づいて動作し、Incronはファイルイベントに基づいて動作します。したがって、Incronエントリを設定してSFTPアップロードディレクトリを監視し、イベントが検出されるたびに特定のファイルをコピーできます。

見てinotify のマニュアルページさまざまなイベントを説明するために使用されます。私はあなたが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:ディレクトリの変更を監視し、アクションを実行します。このオプションを試すには、さらに必要な詳細が表示されます。

おすすめ記事