" /> " /> CubaGames » Tick based games: como usar a cron

por Romulo De Lazzari em 16/08/2007 as 11:43

Cron

O desenvolvimento do projeto "Jogo dos Deuses" está a toda (queria ter uma foto agora do cronograma colado na parede entre o meu pc e o do Tiago) e o grande problema da semana foi fazer o tick funcionar.

Mas afinal o que é tick?

Ai ai ai ai, eu já disse o que é tick aqui, você não lembra?

Tá, agora eu sei o que é tick, mas como eu faço ele funcionar?

Usando a cron.

E o que é a cron?

A cron é um "agendador de tarefas" que qualquer sistema operacional Linux possui. Com ele você poderá mandar o sistema executar uma determinada tarefa em um determinado dia, uma determinada hora e um determinado minuto. Também poderá mandar ser executado algo com uma certa peridiocidade (de 5 em 5 minutos), o que é o nosso caso.

Para acessar as regras da cron, usa-se o comando crontab -e, quando você usa esse comando será aberto um arquivo com as regras configuradas para o seu usuário. Esse arquivo é aberto em um editor chamado nano (uma coisa muito bizarra), então sugiro que use o VI (lindo e maravilhoso) para editar os arquivos da cron, para tal, use o comando export EDITOR=vi antes de usar o crontab -e.

As regras dos arquivos da crontab são as seguintes:

PHP:
  1. #minutos horas dias-do-mês mês dias-da-semana comando
  2. * * * * * php /var/www/algumArquivo.php

Então, o primeiro caractere quer dizer minutos (0 a 59), o segundo horas (0 a 23), o terceiro dias do mês(1 a 31), o quarto quer dizer o mês (1 a 12), o quinto dias da semana (0 a 6, zero igual a Domingo) e por final o comando que deseja executar (nesse caso executando um arquivo php). Quando colocamos asterisco (*) quer dizer todos (todos dias da semana, todas as horas, etc).

PHP:
  1. #executado às 23:59 de todos os Domingos
  2. 59 23 * * 0 /algumaPasta/algumScript

Pode ser usado o hífen para usar faixas, veja o exemplo:

PHP:
  1. #executado às 10:00 de todos os dias de semana, exceto Sábado e Domingo
  2. 0 10 * * 1-5 /algumaPasta/algumScript

Também pode ser usada a vírgula para lista de valores:

PHP:
  1. #executado no minuto 1 e 31 de todas as horas dos meses 1, 2 e 3
  2. 1,31 * * 1,2,3 * /algumaPasta/algumScript

Mas, suponhamos o seguinte caso: no nosso jogo todas as atitudes tomadas pelo jogador custam pontos de vida, por exemplo, fazer compras (10 pontos), programar (20 pontos), blogar (20 pontos), jogar bola (40 pontos). E caso nós não tenhamos a quantidade necessária de pontos para fazer a tal atitude estaremos cansados e teremos que esperar. O nosso tick é de 5 minutos e a cada tick recuperamos 10 pontos de vida. Então colocariamos na cron:

PHP:
  1. #executado a cada 5 minutos
  2. */5 * * * * php /algumaPasta/algumScript/tick.php

E lá no nosso tick.php teríamos a soma de 5 pontos de vida (seja via banco de dados, via arquivo texto, ai é com vocês). Ponto principal, como vou saber se está realmente funcionando? Faça o seguinte adicione um arquivo de log na crontab fazendo o seguinte comando:

PHP:
  1. #executado a cada 5 minutos
  2. */5 * * * * php /algumaPasta/algumScript/tick.php
  3.  
  4. #logando execução da cron também a cada 5 minutos
  5. */5 * * * * date>> /tmp/log.txt

Dessa maneira, você estará colocando a data e hora em um arquivo log.txt na pasta tpm do sistema, salve seu arquivo, espere 5 minutos e confira se está sendo salvo o arquivo de log.

Finalizando, a cron facilita muito a vida dos programadores para fazer backups automáticos e agendar tarefas específicas para softwares (no nosso caso o tick do game ;) ).

Um abraço e aguardo comentários para possíveis sugestões e/ou reclamações.

ps: o "Jogo dos Deuses" está em desenvolvimento, mas ainda não temos nada "visual" para mostrar, aguardem mais notícias em breve. Infelizmente esse projeto não foi adiante

ps2: por que ele fez esse post se isso tem no google? O que eu achei no google não foi suficiente para resolver o problema.

Update: Fiz alguma correções para o real funcionamento da cron.

Categorias: CubaGames, Desenvolvimento | 1 Comment »


1 Comentário

  1. Esse artigo me ajudou muito a entender o que eu precisava, também voltado ao desenvolvimento de uma game online.

    Obrigado pela ajuda !


    Comentário de Sergio - 09/07/2009 às 9:57 am #

Deixe um comentário