Jump to content
fireburn

tweaks em codigo

Recommended Posts

fireburn

Bem necessito de entregar um projecto que faça uma monotorização de um determinada pasta e que detecte qual o ficheiro que ira ser alterado, no meio disto ira haver uma componente em que ira haver mais projectos a correr ao mesmo tempo a tentar eliminar o meu processo e o meu a tentar eliminar os outros.. ate agora consegui desenvolver o seguinte codigo mas gostava de ter opinioes de como melhorar isto .. sei que este codigo tem alguns erros, mas infelizmente programar nao é o meu forte ..

Desde ja agradeço as opinioes ..

#!/usr/bin/perl


open ls, "ls -alRt /home/admin/tp2";

@listagem = <ls>;

close ls;

sub comparacao
{
	open listagem2, "ls-alRt /home/admin/tp2 |";
	@count2=<listagem2>;
		if ($count2 ne $listagem)
		{
			open (resultado, '>>/tmp/resultado_tp2');
			print resultado "o grupo DNS detectou que o ficheiro foi alterado";
			close (resultado);
		}


}

sub keepalive
{

exec "crontab -e admin * * * * *  /home/admin/tp2/meta2dns.pl";


}

sub mata
{
open ps, "ps xauwf | grep admin | grep -v meta2dns.pl";

while ($idprocesso=<ps>)
	{
		chop($idprocesso);
		kill -9, $idprocesso 
	}			

}
comparacao();
keepalive();
mata();

Share this post


Link to post
Share on other sites
falco

Antes de mais faz sempre isto, antes de mais nada:

use strict;
use warnings;

Porque é que estás a fazer isto:

open ls, "ls -alRt /home/admin/tp2";

@listagem = <ls>;

Quando podes fazer:

my $dir = "/home/admin/tp2";
my @listagem = glob "$dir.* $dir*";

Não costumo fazer isto, mas como já passou muito tempo desde o post inicial e como quero demonstrar como se faz isto em Perl. Fiz o script que implementa a funcionalidade de monitorizar essa directoria (não testei). Não pedende do cron, nem da shell e diversos outros programas externos (como no teu caso), só uma função (porque uso o mesmo código em dois sítios diferentes), não executa a cada segundo, porque nem deve ser preciso e tratou-se exclusivamente de opção minha:

use 5.010
use strict;
use warnings;

my $dir = "/home/admin/tp2";
my $glob_pattern = "$dir.* $dir*";

sub consulta_ficheiros {
    my @listagem = glob $glob_pattern;
    return map { $_ => (stat $_)[9] } @listagem;
}


my %files = consulta_ficheiros();

while(1) {
    my %new_files = consulta_ficheiros();
  
    foreach my $file_name (keys %new_files) {
        if(!exists $files{$file_name}) {
            say "Criado novo ficheiro: '$file_name';
        }
        else {
            if($files{$file_name} != $new_files{$file_name}) {
                say "O ficheiro $file_name, foi alterado";
            }
        }
    }

    sleep(5); #executa o ciclo se 5 em 5 segundos...
}

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.