私はLinux(openSUSE 10.X)ボックスを持っており、SFTPサービスを持っています。SFTPで転送されたファイル
誰かがファイルを置くと、別のディレクトリにファイルを移動するためのスクリプトを書く必要があります。私はcronの仕事を書いたくありません。彼らがファイルを送ったかどうか確認するためのイベントや何かがありますか?
私はLinux(openSUSE 10.X)ボックスを持っており、SFTPサービスを持っています。SFTPで転送されたファイル
誰かがファイルを置くと、別のディレクトリにファイルを移動するためのスクリプトを書く必要があります。私はcronの仕事を書いたくありません。彼らがファイルを送ったかどうか確認するためのイベントや何かがありますか?
アプリケーションを作成してinotifyイベントにフックすることができます。
そして、プログラムをcで書いたくない場合は、コマンドラインからinotify-toolsを使うことができます:https://github.com/rvoicilas/inotify-tools/wiki/ –
また、Net::SFTP::Serverもあります。これは、Perlで書かれたSFTPサーバーで、必要なものを実行するように拡張することができます。
いくつかのコード:
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename();
my $server = Server->new(timeout => 15);
$server->run;
exit(0);
package Server;
use Net::SFTP::Server::Constants qw(SSH_FXF_WRITE);
use parent 'Net::SFTP::Server::FS';
sub handle_command_open_v3 {
my ($self, $id, $path, $flags, $attrs) = @_;
my $writable = $flags & SSH_FXF_WRITE;
my $pflags = $self->sftp_open_flags_to_sysopen($flags);
my $perms = $attrs->{mode};
my $old_umask;
if (defined $perms) {
$old_umask = umask $perms;
}
else {
$perms = 0666;
}
my $fh;
unless (sysopen $fh, $path, $pflags, $perms) {
$self->push_status_errno_response($id);
umask $old_umask if defined $old_umask;
return;
}
umask $old_umask if defined $old_umask;
if ($writable) {
Net::SFTP::Server::FS::_set_attrs($path, $attrs)
or $self->send_status_errno_response($id);
}
my $hid = $self->save_file_handler($fh, $flags, $perms, $path);
$self->push_handle_response($id, $hid);
}
sub handle_command_close_v3 {
my $self = shift;
my ($id, $hid) = @_;
my ($type, $fh, $flags, $perms, $path) = $self->get_handler($hid);
$self->SUPER::handle_command_close_v3(@_);
if ($type eq 'file' and $flags & SSH_FXF_WRITE) {
my $name = File::Basename::basename($path);
rename $path, "/tmp/$name";
}
}
保存サーバー、chmod 755 $it
内のどこかに、スクリプト、およびデフォルトの代わりにSFTPサーバーとして使用するには、OpenSSHの設定。
この質問はsuperuser.comに属している可能性があります。 – hochl
答え:http://stackoverflow.com/questions/7566569/how-to-continuosly-monitor-the-directory-using-dnotify-inotify-command – matiu
[incron ](http://inotify.aiken.cz/?section=incron&page=doc&lang=en)プログラムは、 'inotify(7)'と 'crond(8)'の組み合わせのようなものです。ファイルシステムのイベントを待ち、アクション。 – sarnold