segunda-feira, 19 de outubro de 2015

Atualizando Servidor com Horário de Verão


Com a alteração do horário de verão existe a necessidade da atualização do servidor. Para fazer essa alteração é necessário acessar como root.

Para a exibição da hora não é necessário root, apenas para a alteração.  

Exibe data e hora:

$ date

A saída exibirá algo parecido com:
Mon Oct 19 09:58:19 BRST 2015

Altera hora para 10:00 horas:

# date -s "10:00"

Informações de manual do comando:

$ man date

Outra forma:

# date -s 'hh:mm:ss'

Sendo:

hh: a hora de 00 à 23
mm: minutos com 2 dígitos de 00 a 59
ss: segundos com 2 dígitos de 00 a 59



Apenas a data:

# date mmddhhmmyyyy

Sendo:
mm: mês
dd: dia
hh: hora
mm: minuto
yyyy: ano

Outra forma:
Atualizando data

# date -s 'yyyymmdd'

yyyy: o ano com 4 dígitos
mm: o mês com 2 dígitos
dd: o dia com 2 dígitos
Atualizando hora
               

Depois de digitado o comando com os respectivos valores, digite isso para salvar as alterações (algumas distros não precisam desse comando):

# clock -w

Eu considero mais fácil ainda fazendo a conexão com um servidor de hora. No caso o NTP.

Caso não possua o ntpdate instalado você pode instalar a partir do source:http://www.ntp.org/downloads.html, ou se possui o aptitude:

# aptitude install ntpdate

Pode se encontrar uma lista de servidores ntp’s no link:http://support.ntp.org/bin/view/Servers/NTPPoolServers

Com o comando abaixo será feita uma ponte com o servidor (no caso pool.ntp.or) e a data e a hora será baixada para a máquina local onde será imediatamente atualizada:

# ntpdate pool.ntp.org

ou

# ntpdate -u ntp.usp.br

Também pode se utilizar o ip do observatório nacional:

# ntpdate -u 200.20.186.75

No meu caso em uma das máquinas o comando ntpdate constava como “depracated” (desatualizado/ não mais utilizado)
Segue o comando com a mensagem:

/home/usuario # ntpdate -u ntp.usp.br

       !!!!!!!!!!!!!!  WARNING !!!!!!!!!!!!!!!!!!

The ntpdate program is deprecated and should not be used any more.  To
quote the upstream ntp developers:

  "The functionality ntpdate offered is now provided by the ntpd daemon
  itself.  If you call ntpd with the command line option -q it will
  retrieve the current time and set it accordingly."

Please check the Network Time Protocol (NTP) daemon man page and
  http://support.ntp.org/bin/view/Dev/DeprecatingNtpdate
for further information.

You can replace the ntpdate call with "rcntp ntptimeset" to achieve an
inital poll of the servers specified in /etc/ntp.conf.

The program /usr/sbin/sntp offers comparable functionality to ntpdate.
Specifically
  sntp -P no -r pool.ntp.org
is equivalent to
  ntpdate pool.ntp.org

For further details please refer to the man page of sntp.
sntp: not enough valid responses received in time
You have new mail in /var/mail/root


Neste caso foi utilizado o commando referido na mensagem:

#  sntp -P no -r pool.ntp.org


É possível  também colocar o script na cron para ser checado de hora em hora.

# crontab –e

ou

# vi /etc/crontab

Colocar o código:

00 * * * * ntpdate -u pool.ntp.org

Ou se preferir:

*/59 * * * * ntpdate -u pool.ntp.org




Também é possível utilizando o NTP de forma automatizada para entrar e sair do horário de verão na data correta.

Para configurar o cincronismo no arquivo /etc/ntp.conf na linha server:

#vi /etc/ntp.conf

server pool.ntp.org


Para iniciar o serviço:

# service ntpd start

Ou:

# /etc/rc.d/init.d/ntpd start

Ou::

# /etc/init.d/ntp start


Para parar

# /etc/init.d/ntp stop


Para verificar os logs no /var/log/messages:

# tail /var/log/messages

Ou:

# grep ntpd /var/log/messages

Referencia:

sexta-feira, 2 de outubro de 2015

Mais da Classe Robot - Usando o Cursor do Mouse

Hoje selecionei um código ainda mais simples para testar a classe Robot. O código abaixo faz a impressão da palavra HELLO no Notepad com um delay de 500 milissegundos entre as letras.


import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.IOException;

public class Robot05{
 

  public static void main(String[] args)
                 throws AWTException,IOException{

     int keyInput[] = {
            KeyEvent.VK_H,
            KeyEvent.VK_E,
            KeyEvent.VK_L,
            KeyEvent.VK_L,
            KeyEvent.VK_O
        };

    Runtime.getRuntime().exec("notepad");

    Robot robot = new Robot();

    robot.keyPress(KeyEvent.VK_SHIFT);
    for (int cnt2 = 0;cnt2 < keyInput.length; cnt2++){
      if(cnt2 > 0){
             robot.keyRelease(KeyEvent.VK_SHIFT);
      }
      robot.keyPress(keyInput[cnt2]);
      robot.delay(500);
    }
  }
}



Uma ação bacana da classe é mover o cursor do mouse. Antes um código de programa para capturar e exibir a posição do cursor do mouse.




import java.awt.MouseInfo;


    public class Mouse {
        public static void main(String[] args) {
            while ( true ) {
                System.out.println( MouseInfo.getPointerInfo().getLocation() );
            }
        }
    }



Agora podemos posicionar o mouse em uma localização e capturar os pontos X e Y da localização definida. No programa abaixo definimos as posições que escolhemos usando o código anterior.




import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.InputEvent;


public class RobotExe {

public static void main(String[] args) {
     
 
        try {
            Robot robot = new Robot();        
         
            robot.delay(5000); // Tempo para o programa abrir        
            Point p = new Point();

            p = MouseInfo.getPointerInfo().getLocation();
            System.out.println("x = " + p.x);
            System.out.println("y = " + p.y);
         
            int x = 291;
            int y = 149;
         
            // Move mouse cursor to x, y
            robot.mouseMove(x, y);

            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
         

            robot.mouseWheel(-100);
        } catch (AWTException e) {
            e.printStackTrace();
        }
    }
}


O próximo passo seria armazenar as posições de um intervalo de tempo em um arquivo e depois mandar executar as posições do arquivo criando um buffer de memória de movimentação do cursor. Isso seria suficiente para criar um executável no Windows que pode ser ativado em um determinado horário. Esse foi o artifício usado na história contada do post anterior.