Virtual Arts Design
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Scripts PHP no Cron

Ir para baixo

Scripts PHP no Cron Empty Scripts PHP no Cron

Mensagem por Admin Sex Dez 21 2012, 21:42

Scripts PHP no cron
O crontab é um programa de agendamento de tarefas que são realizadas automaticamente em intervalos de tempo previamente definidos. Tarefas típicas são a rotação de arquivos de log, o ajuste de data e hora do servidor, etc. Normalmente estas tarefas consistem em rodar shell scripts e programas.

O PHP é uma linguagem de programação para aplicativos web. Há anos programo nesta linguagem e me sinto muito mais confortável criando um script PHP do que um shell script. Aí me veio a seguinte pergunta: será que é possível rodar um script PHP diretamente no console, sem precisar usar um navegador?

Sim! É possível rodar um script PHP no console! Este texto vai mostrar como fazer isto e mais, como rodar scripts PHP no cron. Você deve estar se perguntado para quê tudo isto - é por pura preguiça de ter que aprender e me especializar em mais uma linguagem, por que sou semianalfabeta em shell script sorriso
Testando o PHP

A primeira providência é localizar o interpretador PHP. Fiz isto com um whereis:

# whereis php
php: /usr/bin/php /usr/lib/php /usr/include/php /usr/man/man1/php.1.gz /usr/share/man/man1/php.1.gz

Você pode obter caminhos diferentes, pois dependem da forma como o PHP foi instalado. Em todo caso, o binário deve estar em algum diretório bin. Sabendo onde está, podemos chamar diretamente o executável com:

/usr/bin/php scriptTeste.php
... ou simplesmente ...
php scriptTeste.php

Podemos informar o caminho completo do executável (primeiro exemplo) ou diretamente o executável (segundo exemplo) porque ele se encontra num diretório que faz parte da variável de contexto $PATH:

# echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin

Agora vamos criar um mini script PHP e colocá-lo num diretório qualquer, digamos /meusPHP:

scriptTeste.php
echo 'Passei no teste';
?>

Para confirmar que o script PHP roda via console basta acionar o executável chamando o script de teste:

# php /meusPHP/scriptTeste.php
Passei no teste

Se a mensagem for ecoada na tela, então o script rodou comemora
Exemplo da vida real

Eu tenho um script PHP que faz a manutenção das minhas bases de dados no MySQL. Aqui está um resumo dele:

otimizar.php

$server = 'localhost';
$user = 'usuário';
$senha = 'senha';
$dbname = 'base_de_dados';

$ = mysql_connect( $server, $user, $senha );
if( !$ ) {
die( 'Não deu para conectar ' . mysql_error() );
}

$db_select = mysql_select_db( $dbname, $ );
if( !$db_select ) {
die( "Não deu para selecionar $dbname " . mysql_error() );
}

$all_tables = mysql_query( "SHOW TABLES" );
while( $table = mysql_fetch_assoc( $all_tables ) ) {
foreach( $table as $db=>$tablename ) {
mysql_query( "OPTIMIZE TABLE " . $tablename ) or die ( mysql_error () );
}
}

mysql_close( $ );
?>

Este script ficava "escondido" na área dos sites e, de tempos em tempos, eu o chamava pelo browser para que fosse executado. Para quem não sabe, as tabelas que sofrem muitas alterações acabam se fragmentando (o chamado overhead) e o banco de dados vai ficando cada vez mais lento ou a tabela acaba se corrompendo. Daí a necessidade de dar uma otimizada de vez em quando.

E o que é este de vez em quando? Na prática, era quando eu lembrava e, vira e mexe, eu não lembrava triste Cansada dos meus esquecimentos (e suas consequências desastrosas), resolvi colocar este script PHP no cron.
O crontab

O crontab é um executável (o meu fica em /usr/bin/crontab) que distribui as tarefas agendadas de acordo com um arquivo de configuração que fica em /var/spool/cron/crontabs. Cada usuário da máquina pode ter um arquivo de configuração próprio, mas só o root pode criá-los. Para saber como está a sua configuração, chame o crontab:

# crontab
crontab 2.3.3
crontab file replace crontab from file
crontab - replace crontab from stdin
crontab -u user specify user
crontab -l [user] list crontab for user
crontab -e [user] edit crontab for user
crontab -d [user] delete crontab for user
crontab -c dir specify crontab directory

Observe que o crontab com a opção -l lista a configuração do usuário. Faça isto:

# crontab -l
# If you don't want the output of a cron job mailed to you, you have to direct
# any output to /dev/null. We'll do this here since these jobs should run
# properly on a newly installed system, but if they don't the average newbie
# might get quite perplexed about getting strange mail every 5 minutes. :^)
#
# Run the hourly, daily, weekly, and monthly cron jobs.
# Jobs that need different timing may be entered into the crontab as before,
# but most really don't need greater granularity than this. If the exact
# times of the hourly, daily, weekly, and monthly cron jobs do not suit your
# needs, feel free to adjust them.
#
# Run hourly cron jobs at 47 minutes after the hour:
47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null
#
# Run daily cron jobs at 2:40 every day:
40 2 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null
#
# Run weekly cron jobs at 2:30 on the first day of the week:
30 2 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null
#
# Run monthly cron jobs at 2:20 on the first day of the month:
20 2 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null

Toda linha de comando possui 6 campos separados por um espaço ou tab. Cada um destes campos tem um significado específico:

* Minutos
* Hora
* Dia do mês
* Mês
* Dia da semana
* Programa para execução

Assim, se eu quiser que o script de otimização de tabelas seja executado todo segundo dia da semana às 3:50 hs basta colocar o script no diretório apropriado e acrescentar a seguinte linha ao crontab do usuário root:

#
# Rodar semanalmente o otimizador de tabelas às 3:50:
50 3 * * 1 php /meusPHP/otimizar.php

Você pode editar diretamente o arquivo /var/spool/cron/crontabs/root ou editá-lo usando o crontab:

# crontab -e

Finalmente posso me dar ao luxo de esquecer de otimizar tabelas - o crontab se encarrega do serviço e eu não fico com a consciência pesada.
avatar
Admin

Fundador

Mensagens : 1498
Cash'Arts : 13561
Reputação : 0
Entrada : 06/12/2012
Software : Adobe Photoshop CS5
Localização : Na frente do PC
1 0 2 0
3 0
100%

https://virtualdesign.forumeiros.com

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos