他のスクリプトが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-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]
次に、オープン/クローズイベントペアのログを監視するデーモン/スクリプトを開発する必要があります。これは、完了したファイル転送を示します。 「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:ディレクトリの変更を監視し、アクションを実行します。このオプションを試すには、さらに必要な詳細が表示されます。