+ Responder ao Tópico



  1. Bom dia amigos, depois de fazer vários testes com vários tipos de scripts, resolvi fazer o meu próprio sistema de download, ele conecta tanto via telnet como api, gera o backup, e depois faz o download do arquivo pra uma pasta específica...

    Banco onde ficam os dados dos mikrotiks (ip/usuario/senha/etc...):

    Código :
    # --------------------------------------------------------
     
    #
    # Estrutura da tabela `contratosNAS`
    #
     
    CREATE TABLE `contratosNAS` (
      `id` int(11) NOT NULL auto_increment,
      `idNAS` int(11) NOT NULL,
      `descricao` varchar(255) NOT NULL,
      `identificacao` varchar(255) default NULL,
      `ip` varchar(255) NOT NULL,
      `usuario` varchar(255) NOT NULL,
      `senha` varchar(255) NOT NULL,
      `porta_web` varchar(255) NOT NULL,
      `porta_api` varchar(255) NOT NULL,
      `conexao` varchar(255) NOT NULL,
      `tipo` varchar(255) NOT NULL,
      `backup` int(11) default '0',
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    script php:

    Código :
    ?php
    echo "########## Início do backup: ".date("d/m/Y H:m:s")." ##########\n\n";
    function dateDiff($sDataInicial, $sDataFinal){
            $sDataI = explode("-", $sDataInicial);
            $sDataF = explode("-", $sDataFinal);
            $nDataInicial = mktime(0, 0, 0, $sDataI[1], $sDataI[0], $sDataI[2]);
            $nDataFinal = mktime(0, 0, 0, $sDataF[1], $sDataF[0], $sDataF[2]);
                    return ($nDataInicial > $nDataFinal) ?
                    floor(($nDataInicial - $nDataFinal)/86400) : floor(($nDataFinal - $nDataInicial)/86400);
    }
    $host = "localhost";
    $login_bd = "login";
    $senha_bd = "senha";
    $db = "banco";
    $con = mysql_connect($host, $login_bd, $senha_bd) or print mysql_error();
    mysql_select_db($db, $con) or print mysql_error();
    require ('classeAPI.php');
    require ('PHPTelnet.php');
    // pegas NAS
    $sqlMik = mysql_query("select ip,conexao,usuario,senha from contratosNAS where backup = '1'");
    if(mysql_affected_rows($con)){
     
            while($linha = mysql_fetch_array($sqlMik)){
                    // variáveis
                    $ip = $linha['ip'];
                    $usuario = $linha['usuario'];
                    $senha = $linha['senha'];
                    $arquivo = "Mikrotik - ".$linha['ip']." - ".date("d-m-Y - H:i")."";
                    if($linha['conexao'] == "api"){
                            //Gerar Backup usando API
                            $API = new routeros_api();
                            $API->debug = false;
                            if ($API->connect($ip, $usuario, $senha)){
                                    $API->write('/system/backup/save',false);
                                    $API->write('=name=Backup.backup');
                                    $API->read();
                                    $API->disconnect();
                            }
                            // conexão ftp
                            if ($conecta = ftp_connect($ip)){
                                    // login
                                    if(ftp_login($conecta, $usuario, $senha)){
     
                                            // faz download e salva o arquivo
                                            if (ftp_get($conecta, "dados/".$arquivo.".backup","Backup.backup", FTP_BINARY")){
                                            }else{
                                                    die("Problemas com Backup, verificar !!!");
                                            }
                                            // fecha conexão ftp
                                            ftp_close($conecta);
                                    }else{
                                            echo "Nao foi possível efetuar o login no NAS: ".$ip."";
                                    }
                            }else{
                                    echo "Sem conexão FTP ao NAS: ".$ip."";
                            }
                    }
                    if($linha['conexao'] == "telnet"){
                            //Gerar Backup usando TELNET
                            $telnet = new PHPTelnet();
                            $resultado = $telnet->Connect($ip, $usuario, $senha);
                            switch ($resultado){
                                    case 0:
                                            $telnet->DoCommand('/system backup save name=Backup', $resultado);
                                    break;
                            }
                            $telnet->Disconnect();
                            sleep(1);
                            // conexão ftp
                            if ($conecta = ftp_connect($ip)){
                                    // login
                                    if(ftp_login($conecta, $usuario, $senha)){
                                            // faz download e salva o arquivo
                                            if (ftp_get($conecta, "dados/".$arquivo.".backup","Backup.backup", FTP_BINARY")){
                                            }else{
                                                    die("Problemas com Backup, verificar !!!");
                                            }
                                            // fecha conexão ftp
                                            ftp_close($conecta);
                                    }else{
                                            echo "Nao foi possível efetuar o login no NAS: ".$ip."";
                                    }
                            }else{
                                    echo "Sem conexão FTP ao NAS: ".$ip."";
                            }
                    }
                    echo date("d/m/Y H:m:s")." - Backup efetuado: ".$ip."\n";
                    sleep(1);
            }
    }
    // fecha conexão sql
    mysql_close($con);
     
    //excluir arquivos antigos (maiores que 20 dias)
    // path da sua pasta de origem
    $pasta = "dados/";
    //abre o diretorio
    if(!$open = @opendir($pasta)) die('O diretório não é valido\n!');
    echo "\n";
    while(($nomearq = readdir($open)) !== false) {
     
            if($nomearq == "." or $nomearq == "..") continue;
            $explode = explode(" - ",$nomearq);
            $dataArquivo = $explode[2];
            $dataHoje = date("d-m-Y");
            $contaDias = dateDiff($dataHoje,$dataArquivo);
            if ($contaDias >= 20){
                    $linkArquivo = "$pasta"."$nomearq";
                    unlink($linkArquivo);
                    echo "Arquivo excluído: ".$nomearq."\n";
            }
    }
    echo "\n########## Fim do backup: ".date("d/m/Y H:m:s")." ##########\n\n";
    ?>

    podem agendar o arquivo pra executar todo dia, ou como quiserem:

    Código :
    #Backup Mikrotik
    00 04 * * * pegaBackupMikrotik.php > /dev/null 2>&1

    isso ae galera, não sou expert em programação, portanto pode ter algum erro ae, mas está funcionando certinho aqui, se alguem quiser modificar fique a vontade...só nao esqueça dos créditos...ehehhehe...abraços...t+

    Corrigindo: lembrar de ativar a porta API e a porta Telnet, nos servidores que vc queira pegar o backup, e um dica, se observarem ele faz o backup apenas dos servidores que estão com o campo "backup" em 1, se estiver 0 passa direto e dar permissão de leitura e escrita na pasta backup pro usuario que vai executar o scritp,´acho q se rodar pela web, tem ser o usuário do apache, se rodar agendado acho q pro root, nao tenho ctz, e uma dica, criem um arquivo .htaccess pra proteger a pasta onde fica tudo isso ae, o script e os backups... ...Funciona em qq versão do MIK...ok..flws
    Última edição por Mr_Dom; 03-08-2009 às 08:17.

  2. Muito bom, é isto que está faltando ultimamente no Fórum, novas idéias!!! Parabéns pela iniciativa, vamos testar.






Tópicos Similares

  1. Sistema de backup para restaurar rapidamente
    Por cokidi no fórum Servidores de Rede
    Respostas: 6
    Último Post: 28-11-2004, 07:07
  2. Sistema de busca - PHP
    Por Walfredo no fórum Linguagens de Programação
    Respostas: 4
    Último Post: 26-06-2004, 12:51
  3. Sistema de busca - PHP
    Por Walfredo no fórum Linguagens de Programação
    Respostas: 3
    Último Post: 09-06-2004, 08:57
  4. Sistema de Backup - Red Hat 8
    Por no fórum Servidores de Rede
    Respostas: 1
    Último Post: 22-09-2003, 23:24
  5. Php + sistema de busca
    Por nopp_lnx no fórum Linguagens de Programação
    Respostas: 3
    Último Post: 30-05-2003, 11:14

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L