Kami memiliki server tempat skrip lain sFTP dan mengunduh file setiap hari.
Pertanyaan: Apakah mungkin untuk mendeteksi bahwa file telah diunduh dan kemudian saya mengarsipkan file secara otomatis setelah selesai?
Untuk memperjelas – Kami meng-host file dan orang lain datang dan mengunduhnya.
Ini adalah skrip yang mereka gunakan:
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
Jawaban yang Diterima:
Ada 3 jalan yang bisa saya pikirkan yang mungkin bisa memberi Anda solusi.
1. Subsistem sftp khusus
Anda dapat membungkus sftp-server
daemon melalui sshd_config
dan “timpa” dengan skrip Anda sendiri yang kemudian dapat mencegat sftp-server
lakukan, dan kemudian bertindak ketika Anda melihat bahwa file telah diunduh. Mengganti sftp-server
default di sshd_config
itu mudah:
Subsystem sftp /usr/local/bin/sftp-server
Mencari tahu apa yang harus dilakukan dalam skrip pembungkus akan menjadi bagian yang sulit. Di /usr/local/bin/sftp-server
:
#!/bin/sh
# ...do something...
chroot /my/secret/stuff /usr/libexec/openssh/sftp-server
# ...do something...
2. Perhatikan log
Jika Anda mengaktifkan debugging sftp-sever
Anda bisa membuatnya menunjukkan log saat file dibuka/ditutup dan dibaca/ditulis ke/dari server SFTP. Anda dapat menulis daemon/skrip yang mengawasi log ini dan kemudian mencadangkan file saat diperlukan. Rincian lebih lanjut tentang cara mencapai ini sebagian sudah tercakup dalam jawaban saya untuk U&L Tanya Jawab ini:Level Pencatatan Aktivitas di SFTP serta di sini di entri blog ini berjudul:Pencatatan aktivitas sesi transfer file SFTP.
Log SFTP dapat ditingkatkan sehingga terlihat seperti ini:
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]
Anda kemudian perlu mengembangkan daemon/skrip yang akan memantau log untuk pasangan acara buka/tutup. Ini mewakili transfer file yang telah selesai. Anda juga dapat menggunakan syslog, yang dapat memantau aktivitas log “TUTUP” dan dapat digunakan untuk menyalin file yang ditransfer.
3. Incron
Anda dapat menggunakan event Inotify yang dihasilkan kernel Linux setiap kali sebuah file diakses. Ada layanan bernama Incron yang bekerja mirip dengan Cron. Di mana Cron bekerja berdasarkan waktu, Incron bekerja berdasarkan peristiwa file. Jadi, Anda dapat menyiapkan entri Incron yang akan memantau direktori unggahan SFTP Anda, dan setiap kali peristiwa file tertentu terdeteksi, salin file tersebut.
Terkait:Jelajahi file vmdk di Windows?
Lihat halaman manual inotify untuk deskripsi berbagai acara. Saya yakin Anda ingin menonton read()
(IN_ACCESS
) diikuti oleh close()
(IN_CLOSE_WRITE
). Ini untuk file yang disalin dari server SFTP.
Aturan Incron terlihat seperti ini:
<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
Artikel ini berjudul:Linux incrond inotify:Monitor Directories For Changes And Take Action menunjukkan lebih banyak detail yang diperlukan, jika Anda ingin mencoba dan menggunakan opsi ini.