Usando o comando screen

Antes de começar, eu vou informar a vocês o que podemos fazer usando o comando screen.

Como um linux sysadmin, é muito comum você ter a necessidade de rodar vários comandos de uma vez. Você provavelmente irá abrir várias sessões do ssh para isto, porém, existe uma maneira melhor, mais segura e recomendada.

Outra necessidade que frequentemente irá surgir, é rodar um comando ou script que levará horas para terminar, como por exemplo um rsync. Isto requer que vocÊ mantenha a conexão aberta no ssh, pois se você fechar, o script ou comando também se encerrará, o que pode ser um problema se você tiver a sua conexão a internet interrompida.

Face a estes problemas, podemos começar a apresentar a vocês o comando screen.

Screen – torna possível rodar vários pseudo terminais, manipular e salvar suas entradas e saídas no screen, além de copiar e colar entre as janelas.

Vou mostar como rodar um comando que leva horas, dentro de um screen.

Vamos primeiramente instalar o screen, usando yun, apt-get, ou algum gerenciador de pacotes que você tiver disponível.  Em nosso exemplo usaremos o yum.

yum install screen

Agora digite:

screen

Este comando iniciará uma nova janela dentro do screen para você. Você tem também a opção de iniciar o comando dando um nome a janela (parametro -S). Exemplo:

screen -S janela1

Neste caso, a janela se chamará “janela1”.

O screen funciona como qualquer outra sessão dentro do ssh. Você pode digitar qualquer comando agora, que irá rodar normalmente.

Se você quiser sair da sessão do screen, deixando-a ativa, e manter o comando que estava sendo executado, faça:

Ctrl-a d (pressione control +a, solte, e em seguida aperte d)

Então, quando você quiser voltar a janela screen, digite:

screen -r

Outras opções que você tem quando está dentro do screen são:

1. Para criar uma nova sessão:

Ctrl-a c

2. Para alterar entre as sessões:

Ctrl-a n

Existem outras possiblidades de uso. Para maiores informações e ajuda, você pode utilizar no seu terminal:

man screen

Como instalar PRM (Process Resource Monitor)

O que é e como funciona PRM (Process Resource Monitor) ?

Em poucas palavras:

PRM monitora a tabela de processos ativos. Caso algum destes processos ultrapasse o recurso definido (memória, cpu ou numero de processos), um e-mail é enviado ao administrador e como opção o processo é interrompido.”Killado”.

As configurações do prm no arquivo “conf.prm” irão determinar algumas ações do PRM. Na pasta rules alguns processo são tratados separadamente com definições particulares aos mesmos.

O PRM (Process Resource Monitor) é  sem duvida alguma muito util para evitar alguns tipos de abusos e principalmente sobrecargas desnecessárias ao servidor.
Vamos a instalação:

No SSH root, faça o download do PRM:

 wget http://www.rfxnetworks.com/downloads/prm-current.tar.gz

Descompacte o arquivo:

 tar xvfz prm-current.tar.gz

Acesse a pasta e instale:

cd prm-0.5/
./install.sh

Neste ponto o PRM já estará instalado, agora vamos configurá-lo:

Edite o arquivo de configuração:

pico /usr/local/prm/conf.prm

Na opção:

# enable kernel logging [0=disabled,1=enabled]
USE_KLOG="0"

Mude para:

# enable kernel logging [0=disabled,1=enabled]
USE_KLOG="1"

Na opção:

# enable user e-mail alerts [0=disabled,1=enabled]
USR_ALERT="0"

Mude para:

# enable user e-mail alerts [0=disabled,1=enabled]
USR_ALERT="1"

**A função USR_ALERT “1” irá habilitar o envio de e-mails de alerta ao Administrador caso algum processo ultrapasse o recurso definido.

Em:

# e-mail address for alerts
USR_ADDR="root"

Mude para:

# e-mail address for alerts
USR_ADDR="seuemail@dominio.com.br"

Na maioria das situações não será necessário fazer nenhuma outra modificação, abaixo estarei apenas fazendo uma descrição das funções (apesar de algumas serem bastante óbvias)

# path to user e-mail message file
USR_MSG="$INSPATH/usr.msg"

Este é o caminho do template para o “corpo do e-mail” de alerta que será enviado ao administrador.

# subject of e-mail alerts
SUBJ="Process status report from $HOSTNAME"

Este será o assunto do e-mail de alerta enviado ao administrador.
(A variável $HOSTNAME irá retornar o hostname de seu servidor.)

# check 5,10,15 minute load average. [1,2,3 respective of 5,10,15]
LC="1"

Este será o tempo que o PRM irá verificar o numero de processos ativos. Sendo:
1 = 5 minutos
2 = 10 minutos
3 = 15 minutos

# min load level required to run (decimal values unsupported)
MIN_LOAD="1"

Esta opção define o load mínimo para que o PRM seja ativado.

# seconds to wait before rechecking a flaged pid (pid's noted resource
# intensive but not yet killed).
WAIT="12"

Segundos para aguardar uma nova “rechecagem” de pids dos processos ativos.

# counter limit that a process must reach prior to kill. the counter value
# increases for a process flaged resource intensive on rechecks.
KILL_TRIG="3"

Limite que um processo precisa ser executado para que as regras do PRM sejam checadas.

# argument to pass onto kill commands
KARG="9"

Qual o argumento para o comando kill (padrão e recomendado 9).

# Max CPU usage readout for a process - % of all cpu resources (decimal values unsupported)
MAXCPU="40"

Máximo de CPU (em percentual) para iniciar a leitura das regras

# Max MEM usage readout for a process - % of system total memory (decimal values unsupported)
MAXMEM="20"

Máximo de Memoria (em percentual) para iniciar a leitura das regras

# Max processes for a given command - this is not max processes for user but rather the executable
MAXPS="25"

Máximo de processos para iniciar a leitura das regras.

Para finalizar , salve (ctrl+x y ) e saia do pico.

Germano P Ferreira
Administrador Linux

Como restaurar um banco no sql server express 2005

O cenário é bastante comum. Você tem um arquivo de backup, (*.bak) e precisa restaurá-lo.

Siga os passos abaixo para restaurar o arquivo usando SQL Script (T-SQL)

Passo 1: Descubra o nome logico (logical name) do banco de dados que está no backup.

RESTORE FILELISTONLY
    FROM DISK = 'D:\BackUpYourBaackUpFile.bak'

GO

Passo 2: Use o valor da coluna LogicalName no seguinte passo:

    ----Altere o banco para single user Mode
ALTER DATABASE SeuBancoDeDados

    SET SINGLE_USER WITH
ROLLBACK IMMEDIATE

    ----Restaurar Banco
            RESTORE DATABASE SeuBancoDeDados

    FROM DISK = 'D:\BackUpYourBaackUpFile.bak'
            WITH MOVE 'SeuMDFLogicalName' TO 'D:\Data\SeuArquivoMdf.mdf',

            MOVE 'SeuLDFLogicalName' TO 'D:\Data\SeuArquivoLDF.mdf'

ALTER DATABASE YourDB SET MULTI_USER
GO

SQL Server – Rotina para backup de todos os bancos

A rotina abaixo permite fazer backup de todos os bancos no sql server 2005 e também no sql server express, através de um script que pode ser executado por linha de comando, ou agendado pelo agendador de tarefas do windows (task scheduler).

Siga os passos abaixo:

1) Crie um arquivo de texto com o nome Backup_All_Databases.sql.

2) Cole o seguinte script no arquivo criado. Obs.: Altere a pasta do backup que está no início do script para a pasta que você desejar.

DECLARE @BackupFile varchar(255), @DB varchar(30), @Description varchar(255), @LogFile varchar(50)

DECLARE @Name varchar(30), @MediaName varchar(30), @BackupDirectory nvarchar(200)
SET @BackupDirectory = 'C:\Backuped_SQL_DB\'
--Add a list of all databases you don't want to backup to this.
DECLARE Database_CURSOR CURSOR FOR SELECT name FROM sysdatabases WHERE name <> 'tempdb' AND name <> 'model' AND name <> 'Northwind'

OPEN Database_Cursor
FETCH next FROM Database_CURSOR INTO @DB
WHILE @@fetch_status = 0

BEGIN
SET @Name = @DB + '( Daily BACKUP )'
SET @MediaName = @DB + '_Dump' + CONVERT(varchar, CURRENT_TIMESTAMP , 112)

SET @BackupFile = @BackupDirectory + + @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
SET @Description = 'Normal' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'

IF (SELECT COUNT(*) FROM msdb.dbo.backupset WHERE database_name = @DB) > 0 OR @DB = 'master'
BEGIN
SET @BackupFile = @BackupDirectory + @DB + '_' + 'Full' + '_' +

CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
--SET some more pretty stuff for sql server.
SET @Description = 'Full' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'

END
ELSE
BEGIN
SET @BackupFile = @BackupDirectory + @DB + '_' + 'Full' + '_' +
CONVERT(varchar, CURRENT_TIMESTAMP , 112) + '.bak'
--SET some more pretty stuff for sql server.

SET @Description = 'Full' + ' BACKUP at ' + CONVERT(varchar, CURRENT_TIMESTAMP) + '.'
END
BACKUP DATABASE @DB TO DISK = @BackupFile
WITH NAME = @Name, DESCRIPTION = @Description ,

MEDIANAME = @MediaName, MEDIADESCRIPTION = @Description ,
STATS = 10
FETCH next FROM Database_CURSOR INTO @DB
END
CLOSE Database_Cursor
DEALLOCATE Database_Cursor

3) Execute o seguinte comando no prompt do ms-dos (ou se preferir crie agende uma tarefa com este comando).

sqlcmd -S . -i "C:\Backups\Backup_All_Databases.sql"

Se desejar agente uma tarefa para fazer o backup diariamente.

O plesk não cria o DNS do meu domínio

O plesk não cria o DNS do meu domínio

Este problema acontece quando existe alguma referência dupla ao domínio na tabela dns_zone.
Para verificar se este é o caso, execute no prompt:

"%plesk_bin%"\dbclient.exe --direct-sql --sql="select * from  dns_zone where name like 'DominioDoUsuario.com';"

Caso você tenha dois registros, este tutorial é para você.
Descubra qual é o registro certo, fazendo:

"%plesk_bin%"\dbclient.exe --direct-sql --sql="select * from  domains where name like 'DominioDoUsuario.com';"

Verifique o valor para a coluna dns_zone_id

Verifique qual registro está errado na tabela dns_zone (é o registro que não está na tabela domains – campo dns_zone_id).

Em seguida remova o registro errado, com o seguinte comando:

"%plesk_bin%"\dbclient.exe --direct-sql --sql="delete from  dns_zone where id = IdDoRegistro;"

Para finalizar, execute:

"%plesk_bin%"\dnsmng.exe update *

Alterando o webmail padrão do plesk em todos os domínios para mewebmail

A partir do plesk 8.3 você pode definir o webmail por domínio. Entretanto, por padrão, ao criar um domínio ou migrar de outra versão, todos os domínios ficam sem nenhum webmail.

Você pode definir o horde como webmail padrão para um domínio via linha de comando, assim:

"%plesk_bin%"/domain_pref.exe --update DominioDoUsuario.com -webmail horde

Teoricamente, você também poderia definir o MeWebmail como padrão, seria assim:

"%plesk_bin%"/domain_pref.exe --update DominioDoUsuario.com -webmail mewebmail

Mas você pode trocar todos os domínios que estão usando o horde, para usar o mewebmail, assim:

"%plesk_bin%"\dbclient.exe --direct-sql --sql="update [parameters] set  [value]='mewebmail' where [parameter]='webmail_type'"

em seguida, faça:

"%plesk_bin%"\websrvmng.exe --reconfigure-webmail

Caso seja necessário, em seguida, execute:

"%plesk_bin%"\defpackagemng.exe" --fix --type=webmail

database.exe – Gerenciando banco de dados no plesk através de linha de comando

Os scripts de linha de comando do plesk ficam na pasta: %plesk_bin%

database.exe

Removendo o usuário meuUser do banco MeuBanco:

database.exe --update MeuBanco -remove_user meuUser

Criando o usuário MeuUser2 no banco MeuBanco com a senha 1234:

database.exe --update MeuBanco -add_user MeuUser2 -passwd 1234

Listando bancos mysql, usuário e senha dos domínios no plesk

Para usar este tutorial, use os scripts de linha de comando do plesk, na pasta: %plesk_bin%

Para revelar o banco de dados mysql, usuário e senha de todos os domínios do servidor com um único comando, faça:

dbclient.exe --direct-sql --sql="SELECT db_users.*, data_bases.name, domains.name, data_bases.type FROM db_users INNER JOIN (domains INNER JOIN data_bases ON domains.id = data_bases.dom_id) ON db_users.db_id = data_bases.id WHERE (((data_bases.type)='MySql'))"

Verificando espaço em disco e transferência de toda a revenda

O plesk exibe um relatório da revenda, com o consumo de espaço em disco e transferência, mas não exibe o valor alocado (definido pelo cliente).

Para saber o valor que a revenda definiu, para cada domínio, faça, no prompt de comando:

c:
cd %plesk_bin%
dbclient.exe --direct-sql --sql="SELECT limits.limit_name, limits.value /1048576, domains.name FROM domains INNER JOIN limits ON domains.limits_id = limits.id WHERE ((limits.limit_name='disk_space') AND ((limits.id) In (select limits_id from domains where cl_id in (select id from clients where login='LOGINDAREVENDA'))))"

*Necessário substituir LOGINDAREVENDA pelo login da revenda que deseja fazer a pesquisa.

Revelando login e senha de ftp de um domínio no plesk

Este script usa os scripts de linha de comando do plesk.
Os scripts de linha de comando do plesk ficam na pasta: %plesk_bin%

Para revelar o login e senha de ftp de todos os domínios hospedados no servidor, faça:

c:
cd %plesk_bin%
dbclient.exe --direct-sql --sql="SELECT domains.name, hosting.fp_adm, hosting.fp_pass FROM domains INNER JOIN hosting ON  domains.id = hosting.dom_id"

Como descobrir emails e senhas do plesk

O Plesk tem um script de linha de comando, que permite a você executar SQLS. Com isto, você pode recuperar informações direto da base de dados do plesk, que podem ser muito úteis no gerenciamento do servidor.

Os scripts de linha de comando do plesk ficam na pasta: %plesk_bin%

Para descobrir todos os usuários de email e suas senhas, geradas através do plesk, faça:

c:
cd %plesk_bin%
dbclient.exe --direct-sql --sql="select mail.mail_name + '@' + domains.name,accounts.password from domains,mail,accounts where domains.id=mail.dom_id and accounts.id=mail.account_id order by domains.name ASC, mail.mail_name ASC"