Pesquisar neste blog

sexta-feira, 17 de abril de 2009

Como montar um compartilhamento NFS no CENTOS

No cliente

# yum install portmap -y

Execute o rpcinfo -p
# service portmap start

Configurar para carregar na inicialização
chkconfig portmap on

Para montar a unidade nfs na inicialização
# vim /etc/fstab
nfshostname:/dados/drqueue /mnt/drqueue nfs rw,hard,intr 0 0

# mkdir /mnt/drqueue
# mount -t nfs 192.168.2.2:/dados/drqueue /mnt/drqueue



No servidor

# yum install nfs nfslock portmap -y

Configurar para carregar na inicialização
# chkconfig nfs on
# chkconfig nfslock on
# chkconfig portmap on



# vim /etc/exports
/dados/drqueue 192.168.2.0/255.255.255.0(rw,no_root_squash,async)

# vim /etc/hosts.allow
portmap: 192.168.2.0/255.255.255.0

Execute o comando exportfs para ver os mapeamentos
# exportfs




terça-feira, 7 de abril de 2009

Matando conexões de uma base no MSQLServer

Hoje precisei matar algumas conexões ativas em uma base de dados específica então o fiz. Geralmente isto é um processo cansativo, abrir o abrir o enterprise manager e matar cada processo ativo, um por um. Quando você tem uma ou duas conexões ativas é tranquilo, agora quando você tiver 10 conexões pode ser um processo irritante e cansativo. Então para ajudar nesta tarefa árdua aqui vai o script que busca todas as conexões ativas de uma dada base de dados e mata cada conexão.

--Colocar a base de dados em modo single_user

alter
database dbName set single_user with rollback immediate

-- Agora vamos realizar a tarefa de matar as conexões
declare @execSql varchar(1000), @databaseName varchar(100)
-- Set the database name for which to kill the connections
set @databaseName = 'MinhaDatabase'

set @execSql = ''
select @execSql = @execSql + 'kill ' + convert(char(10), spid) + ' '
from master.dbo.sysprocesses
where db_name(dbid) = @databaseName
and
DBID <> 0
and
spid <> @@spid
exec(@execSql)

--Agora vamos repor a base de dados para modo multi_user:

alter database dbName set multi_user with rollback immediate

Criando um script de backup para o SQL Server com data no nome do arquivo da base

Olá pessoal,
aqui vai uma dica de como criar arquivos de backup do sqlserver com a data no nome do arquivo, o que nos facilita muito, pois o sqlserver não nos permite isso usando o gerenciador de backups dele, ele apenas nos permite agendar um dump da base.

Bom o script que falo é um arquivo com instruções sql, onde vamos definir as seguintes variáveis:

  1. Setar nome da database na variável @databaseName
  2. Setar o caminho absoluto da pasta onde vai ser armazenado o backup na variável @backupDirectory
  3. Para testar rode o script pelo Query Analyzer.
Depois de executado o script será criado um arquivo com o seguinte formato: Database-07.04.2009.bak

Para agendar o script para rodar diariamente é só criar um new job e na aba steps, campo comand colar o conteúdo do script e pronto.

Ai vai o script:

-----------------------------------------------------------------
-- Backup database to file
-----------------------------------------------------------------
declare @backupFileName varchar(100), @backupDirectory varchar(100),
@databaseDataFilename varchar(100), @databaseLogFilename varchar(100),
@databaseDataFile varchar(100), @databaseLogFile varchar(100),
@databaseName varchar(100), @execSql varchar(1000)

-- Set the name of the database to backup
set @databaseName = 'MinhaDatabase'
-- Set the path fo the backup directory on the sql server pc
set @backupDirectory = 'caminho_absoluto_para_backup_directory' -- such as 'c:\temp\'

--
-- ATENÇÃO: DAQUI PARA BAIXO NÃO PRECISA MECHER EM NADA
--

-- Create the backup file name based on the backup directory, the database name and today's date
set @backupFileName = @backupDirectory + @databaseName + '-' + replace(convert(varchar, getdate(), 110), '-', '.') + '.bak'

-- Get the data file and its path
select @databaseDataFile = rtrim([Name]),
@databaseDataFilename = rtrim([Filename])
from master.dbo.sysaltfiles as files
inner join
master.dbo.sysfilegroups as groups
on
files.groupID = groups.groupID
where DBID = (
select dbid
from master.dbo.sysdatabases
where [Name] = @databaseName
)

-- Get the log file and its path
select @databaseLogFile = rtrim([Name]),
@databaseLogFilename = rtrim([Filename])
from master.dbo.sysaltfiles as files
where DBID = (
select dbid
from master.dbo.sysdatabases
where [Name] = @databaseName
)
and
groupID = 0

print 'Backing up "' + @databaseName + '" database to "' + @backupFileName + '" with '
print ' data file "' + @databaseDataFile + '" located at "' + @databaseDataFilename + '"'
print ' log file "' + @databaseLogFile + '" located at "' + @databaseLogFilename + '"'

set @execSql = '
backup database [' + @databaseName + ']
to disk = ''' + @backupFileName + '''
with
noformat,
noinit,
name = ''' + @databaseName + ' backup'',
norewind,
nounload,
skip'

exec(@execSql)

segunda-feira, 6 de abril de 2009

NAGIOS - Notificação para grupos de usuarios

Segue abaixo um esquema para notificação de usuários quando algum problema ocorre:


Geralmente temos a necessidade de notificar de forma individualizada, mas o acesso às informações pode ser feita por todos, então criamos da seguinte maneira:

No arquivo contacts foi criado:

define contact{
contact_name Administrador
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email [EMAIL PROTECTED]
}

define contact{
contact_name usuario1
service_notification_commands notify-null
host_notification_commands notify-null
}

define contact{
contact_name usuario2
service_notification_commands notify-null
host_notification_commands notify-null
}

define contact{
contact_name grupo-de-notificao-cpq-1
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email [EMAIL PROTECTED]
}

define contact{
contact_name grupo-de-notificao-cpq-2
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email [EMAIL PROTECTED]
}

No arquivo contactgroups foi criado:

define contactgroup{
contactgroup_name grupo-de-acesso
alias Profissionais que tem acesso
members administrador, usuario1, usuario2
}

define contactgroup{
contactgroup_name grupo-de-notificacao-cpd-1
alias Profissionais que sao notificados
members administrador, grupo-de-notificacao-cpd-1
}

define contactgroup{
contactgroup_name grupo-de-notificacao-cpd-2
alias Profissionais que sao notificados
members administrador, grupo-de-notificacao-cpd-2
}


No arquivo hosts foi criado:

define host{
use default
host_name server-cpd-1
alias servidor Linux CPD 1
address 10.10.10.1
}

define host{
use default
host_name server-cpd-2
alias servidor Linux CPD 2
address 10.10.20.1
}


No arquivo services foi criado:

define service{
use default
host_name server-cpd-1
service_description Porta LAN
check_command check_ifoperstatus!public!1
contact_groups administrador, grupo-de-notificacao-cpd-1, grupo-de-acesso
}

define service{
use default
host_name server-cpd-1
service_description Porta LAN
check_command check_ifoperstatus!public!1
contact_groups administrador, grupo-de-notificacao-cpd-2, grupo-de-acesso
}


O nagios manda mensagem para todos que são contatos do serviço, então na definição do usuário eu simplesmente criei o comando notify-null, o acesso é garantido pois ele faz parte do grupo de acesso, mas não recebe nada porque o comando manda a notificação para o lixo. Quem tem que receber notificação pertence ao grupo de notificação, mas recebem a mensagem pelo e-mail de grupo da empresa, evitando inclusive que o nagios tenha que enviar muitas mensagens, essa tarefa passa para o servidor de correio.


quarta-feira, 1 de abril de 2009

Resolvendo problemas de eco no Asterisk

Eco em sistemas de telefonia, como o ASTERISK, é o fenômeno no qual um assinante ouve o eco da sua própria voz após um curto período de tempo junto com a voz da pessoa do outro lado. Neste tutorial vamos dar algumas dicas de como evitar o eco em circuitos analógicos.

Existem, normalmente, duas fontes de eco nos sistemas de telefonia:

* Eco na rede, que é produzido pela interface entre os dois fios no assinante (um aparelho telefônico, por exemplo) e o sistema de transmissão de quatro fios nos entrocamentos da rede pública.
* Eco acústico, que é causado pelo retorno no nível do dispositivo, tal como o retorno do alto-falante no microfone.

Ambos os tipos podem ocorrer simultaneamente e com efeitos compostos. Embora o eco possa ser gerado dos dois lados da linha, o eco que tipicamente degrada a linha é usualmente gerado lado oposto(no lado remoto). Esta é uma informação muito importante, pois permite a identificação da fonte do eco. Em outras palavras, quem ouve o eco, normalmente está do lado oposto de onde ele foi gerado.
Reduzindo o eco em sistemas com ASTERISK.
Este processo se aplica para as placas analógicas da Digium e os bancos de canais analógicos da Xorcom. Ele não terá o mesmo efeito em placas de 1-FXO, nem em placas com sinalização digital.
A principal razão para a geração de eco é o descasamento de impedância. Impedância é a resistência do circuito aos sinais de corrente alternada, e ela muda com a freqüência. O primeiro passo, para reduzir o eco é casar as impedâncias. No ASTERISK isto é feito em dois passos:
1. Configure o país em (/etc/zaptel.conf coloque loadzone=br) para ajustar a impedância das portas FXO com as linhas da rede pública do seu país.
2. Faça uma sintonia fina do casamento de impedância usando o utilitário “fxotune” que fica dentro do diretório zaptel. Este programa envia um tom para a linha telefônica e espera para ouvir o nível de eco. Ele verifica o eco com diferentes parâmetros até encontrar uma combinação que produza menos eco. Após este processo o nível de eco a ser cancelado será menor.
O fxotune é executado em duas etapas: Na primeira você usa:
fxotune –i
Exemplo:
fxotune –i 0
(Use o digito 0 se você precisa discá-lo para pegar linha externa)
Nesta etapa o sistema detecta o descasamento de impedâncias e salva o arquivo /etc/fxotune.conf
Na segunda etapa você usa:
fxotune –s
Nesta etapa o sistema lê os dados do fxotune.conf e aplica a placa. O fxotune –s tem de ser executado sempre na inicialização da máquina logo depois dos drivers serem carregados. Você pode encontrar mais informações usando man fxotune.
Cancelamento de eco
O restante de eco deve ser cancelado usando o cancelador de eco por software do ASTERISK. Se mesmo após estes procedimentos não for possível cancelar o eco, poderá ser necessário usar uma das placas analógicas, lançadas recentemente, tal como a Digium TDM410, que possue placa canceladora de eco e permite um cancelamento com maior amplitude.
O cancelamento de eco é feito por um código de processamento de sinais que compara a voz digital que é enviada com a voz que é recebida. Quando um padrão é identificado, o processamento de sinais subtrai este padrão do sinal de saída, produzindo um sinal livre de eco. O cancelador de eco por software é ativado no arquivo de configuração Zapata.conf

* echocancel=yes
* echotraining=Yes

Em resumo, não é tão simples se ver livre do eco em sistemas analógicos. Se você tiver sorte sua linha vai estar perfeita e sem eco. Se tiver enfrentando problemas com eco, tente o fxotune e depois ative o cancelador de eco. Se mesmo assim você ainda tiver eco, você pode tentar uma das placas de cancelamento de eco. Cabe lembrar que este procedimento só é válido para linhas analógicas.

Fonte:
Autor: Flavio Eduardo.

Lendo um arquivo passado como argumento e mostrando em C

#include stdio.h
#include conio.h
#include stdlib.h
#include string
#include iostream




using namespace std;


int main(int argc, char *arquivo[])
{
if (argc < 2)
{
printf("Falta o parametro caminho + nome do arquivo!!");
exit(0);
}

char str[255];
FILE *arq;
char *endereco;
endereco = arquivo[1];
printf("Arquivo: %s\n",arquivo[1]);

arq=fopen(endereco,"r");
printf("\n");
if(arq)
{
while(!feof(arq))
{
fgets(str,255,arq);
printf(" %s",str);
}
}

fclose(arq);
printf("\n\n");

system("pause");

return 0;
}