#!/usr/bin/perl -T
use strict;
use warnings;
$ENV{PATH} = '/usr/bin';
#
# A execucao deste script supoe a existencia de uma linha em /etc/fstab para
# definir o ponto de montagem da pasta.
# Exemplo (Samba)
# //10.0.0.1/partilha /home/myself/mount_point smbfs noauto,username=xxx,password=yyy,rw 0 0
#
if ( $< != 0 ) { print qq|Apenas o root pode executar este script!\n|; exit 0; }
my $mount_point = q|/home/myself/mount_point|;
my $php_file = q|http://www.example.com/myfile.php|;
my $mount_command = qq|/bin/mount $mount_point >> /dev/null 2>&1|;
my $umount_command = qq|/bin/umount $mount_point >> /dev/null 2&>1|;
my $tries = 3; # Tentativas para montar a pasta
my $wait = 5; # Intervalo em seg. entre tentativas
if ( is_mounted( $mount_point, 0 ) ) { exec_php($php_file) }
exit 0;
sub is_mounted {
my ( $pasta, $counter ) = @_;
if ($counter > 1) { sleep $wait } # damos um tempo para ver se o servidor 'ressuscita' :)
# Terminamos se ao fim de N tentativas nao conseguimos montar a pasta
if ( $counter > $tries ) {
print qq|Impossivel montar $pasta ao fim de +- |
. ( $tries * $wait )
. qq| segundos!\n|;
exit 0;
}
use IO::File;
# Verificamos se a pasta esta montada
my $fh = new IO::File "/etc/mtab", "r";
chomp( my @mounted = <$fh> );
undef $fh;
if ( grep { $_ =~ /$pasta/ } @mounted ) {
# Esta montada
return 1;
}
else {
# Verificamos se o ponto de pontagem esta definido em /etc/fstab
$fh = new IO::File "/etc/fstab", "r";
chomp( my @mounts = <$fh> );
undef $fh;
if ( grep { $_ =~ /\s$pasta\s/ } @mounts ) {
# esta definido, tentamos montar
qx/$mount_command/;
$counter++;
is_mounted( $pasta, $counter );
}
else {
# Nao esta definido! Terminamos com erro.
print qq|Ponto de montagem $pasta nao definido em /etc/fstab!\n|;
exit 0;
}
}
}
sub exec_php {
my $self = shift;
print qx|/usr/bin/lynx --dump $self|;
umount();
return;
}
sub umount {
qx/$umount_command/;
return;
}