Cron

From MoodleDocs

O cron auxilia alguns módulos do Moodle a executar tarefas de forma agendada. Por exemplo, o processo cron pode dizer ao Moodle para verificar todos os fóruns de discussão para que ele possa enviar cópias por email dos novos posts para os assinantes daquele fórum.

O script primário do Moodle que faz tudo isso está localizado no diretório admin, e é chamado de cron.php. Contudo, ele não pode se auto-executar, então você precisa estabelecer um mecanismo no qual o script é executado regularmente (ex. a cada 5 ou 10 minutos). Isso fornece um "ritmo" para que o script possa realizar funções em períodos definidos por cada módulo. Esse tipo de mecanismo regular é conhecido como serviço cron. O serviço pode ser parte de um webhost ou pode ser algo executado a partir de um servidor ou computador diferente.

Visão geral do cron

Visão geral do script

O script cron.php procura através da tabela mdl_modules (assumindo que o prefixo da tabela padrão seja mdl_) na base de dados do Moodle por módulos que tenham agendado funções do cron; então ele procura em cada diretório desses módulos por uma função chamada nome-do-modulo_cron no arquivo lib.php e a executa. Ele também procura através da tabela mdl_block por blocos que tenham agendado seus métodos cron (funções de objeto); então, para cada um desses blocos, ele executa o método cron para um novo objeto associado àquele bloco (eu estou omitindo detalhes para não complicar muito para não-programadores; os programadores podem ler admin/cron.php para mais informações). Esses arquivos (os lib.php e os nos quais as classes de bloco são definidas) podem conter funções de limpeza, email ou qualquer coisa que precise ser executada regularmente. Por exemplo, o cron irá ativar o sistema para criar os backups dos cursos no horário especificado nas configurações de administração. Ele também ativa qualquer módulo de envio de mensagens ou notificações por email dos fóruns, mas nem todas as funções são chamadas toda vez que o cron roda. Algumas funções, como desinscrever estudantes que não tenham logado ou excluir cópias antigas dos arquivos de log, só são executadas ocasionalmente. O arquivo cron.php tem uma sessão que irá chamar aleatoriamente essas tarefas centrais aproximadamente 1 de cada 5 vezes que o cron rodar.

Localização do serviço cron e configuração de tempo

Note que a máquina que executa o cron não precisa ser a mesma máquina que está rodando o Moodle. Por exemplo, se você tem um serviço de web hosting limitado que não tem um serviço cron, então você pode escolher rodar o cron em um outro servidor ou no seu computador de casa. O importante é que o arquivo cron.php seja chamado regularmente.

O carregamento desse script não é muito alto, assim 5 minutos é geralmente um tempo razoável, mas se você estiver preocupado quanto a isso você pode aumentar o período de tempo para algo como 15 ou até mesmo 30 minutos. É melhor não deixar esse período muito longo, pois atrasos de envio de emails podem diminuir a atividade em um curso. Lembre-se de que o envio de emails também espera que o tempo de edição expire antes de entrar na fila para execução.

Testando o cron e ativação manual

Primeiro, teste se o script está funcionando rodando-o diretamente no seu navegador: http://example.com/moodle/admin/cron.php

Se o cron for chamado pela linha de comando por qualquer usuário logado no seu Moodle será criado um ambiente admin temporário para executar e então deslogar o usuário. Você pode desabilitar a execução do cron por linha de comando desativando a sessão apropriada no arquivo cron.php.

Agora, você precisa configurar alguma maneira de executar o script automaticamente e regularmente.

Administrando o cron em sistemas Windows

Existem duas maneiras de configurar a execução do script Moodle cron.php em sistemas Windows:

  • Use o pacote Cron do Moodle. O modo mais simples é utilizar este pequeno pacote MoodleCron-Setup.exe, que torna todo o processo bastante simples instalando um pequeno serviço Windows. Execute-o e esqueça-o! :-)
  • Use uma tarefa agendada. Se você preferir utilizar o agendador que já vem no Windows ou está tendo problemas com o pacote moodle-cron-para-windows, você pode utilizar wget para windows ou php na linha de comando e agendar uma tarefa. Apenas siga os seguintes passos:
    • Escolha ou o php.exe/php-win.exe (binário de linha de comando) ou wget
O php.exe ou o binário php-win.exe (para a versão 5 ou posterior do PHP), que está instalado na pasta do seu php (ex. c:\php), lhe dará uma melhor performance ao executar o script cron.
Se você quiser usar wget, baixe uma versão compilada para Windows das portas nativas do GNU Win32 (http://unxutils.sourceforge.net/), da página Heiko Herold's wget for windows (http://xoomer.virgilio.it/hherold/) ou da página Bart Puype's wget for windows (http://users.ugent.be/~bpuype/wget/). Se você usar o pacote de Heiko Herold, copie todos os arquivos .DLL para o diretório C:\Windows\system32. Copie o arquivo wget.exe para c:\windows (isso garante que wget esteja sempre no caminho de busca).
  • Configure uma tarefa agendada.
- Vá em Iniciar >> Painel de Controle >> Tarefas Agendadas >> Adicionar Tarefa Agendada.
- Clique em "Avançar" to start the wizard:
- Click in the "Browse..." button and browse to c:\php\php.exe or c:\windows\wget.exe and click "Open"
- Type "Moodle Cron" as the name of the task and select "Daily" as the schedule. Click "Next".
- Select "12:00 AM" as the start time, perform the task "Every Day" and choose today's date as the starting date. Click "Next".
- Enter the username and password of the user the task will run under (it doesn't have to be a priviledged account at all). Make sure you type the password correctly. Click "Next".
- Mark the checkbox titled "Open advanced properties for this task when I click Finish" and click "Finish".
- In the new dialog box, type the following in the "Run:" text box:
c:\windows\wget.exe -q -O NUL http://my.moodle.site/moodle/admin/cron.php
or
c:\php\php-win.exe -f c:\moodle\admin\cron.php
Replace "c:\moodle" with the path to your moodle directory or "my.moode.site" with the name of your site.

- Click on the "Schedule" tab and there in the "Advanced..." button.
- Mark the "Repeat task" checkbox and set "Every:" to 5 minutes, and set "Until:" to "Duration" and type "23" hours and "59" minutes.
- Click "OK" and you are done.
  • Teste sua tarefa agendada. You can test that your scheduled task can run successfully by clicking it with the right button and chosing "Run". If everything is correctly setup, you will briefly see a DOS command window while wget/php executes and fetches the cron page and then it disappears. If you refresh the scheduled tasks folder, you will see the Last Run Time column (in detailed folder view) reflects the current time, and that the Last Result column displays "0x0" (everything went OK). If either of these is different, then you should recheck your setup.
  • Logging cron output. You may want to log the output of the cron script as it executes, in case you see the job is producing errors, backups are not being completed or users are experiencing delays in receiving forum emails. To do this, adjust the command so that it uses the php.exe and stores the output in a file called (for example c:\moodle\admin\cron.log). Here is an example of the php.exe command:
c:\php\php.exe -f c:\moodle\admin\cron.php > c:\moodle\admin\cron.log

Administrando o cron em serviços de web hosting

Your web-based control panel may have a web page that allows you to set up a cron service process.

Serviço cron CPanel

Se você está usando CPanel, faça login e então olhe para categoria "Avançada " para o roda-pé da página. Faça clique em Cron Jobs -> Advanced (Unix style). Entre no seguinte para o cron rodar a cada 30 minutos.

Email address for output: emailaddress@mydomain.con
Minute:*/30
Hour:*
Day:*
Month:*
Weekday:* 
Command: wget -q -O /dev/null http://www.mydomain.com/moodle/admin/cron.php

Clique Commit Changes. Confira seu e-mail para a saída.

Cpanel-cron-setup.JPG

Serviço cron para outros sistemas

Para outros sistemas, procure um botão chamado "Cron jobs". Lá você pode pôr a mesma classificação de comandos de Unix como listado abaixo.


Se você não tem permissões para rodar o comando ' wget' no servidor, você pode usar este comando php:

/usr/local/bin/php -q /real/path/to/script/admin/cron.php

Por Exemplo:

/usr/local/bin/php -q /home/username/public_html/moodle/admin/cron.php

Se você não sabe qual é o caminho real de sua pasta de papéis de Moodle você pode usar o comando PHP realpath.

Outro alternativa, se você não tem permissão para rodar o comando ' wget', pode ser usado o comando curl.

Por exemplo:

curl --silent --compressed http://mydomain.com/moodle/admin/cron.php

Usando uma linha de comando cron em Unix

Existem diferentes programas de linha de comando que você pode usar para chamar a página. Nem todos podem estar disponíveis em um certo servidor.

Por exemplo, você pode utilizar uma utilidade Unix como 'wget':

wget -q -O /dev/null http://example.com/moodle/admin/cron.php

Note que nesse exemplo o resultado é descartado (para /dev/null).

Vários usuários do Moodle descobriram que 'wget' às vezes falha. Especialmente se você tem problemas com email digests não sendo enviados diariamente para todos os usuários, um comando alternativo que resolve o problema é:

php http://example.com/moodle/admin/cron.php

A mesma coisa usando lynx:

lynx -dump http://example.com/moodle/admin/cron.php > /dev/null

Note que nesse exemplo o resultado é descartado (para /dev/null).

Alternativamente, você pode usar uma versão standalone do PHP, compilada para ser executada na linha de comando. A vantagem é que os logs do seu servidor web não são enchidos com contastes solicitações ao cron.php. A desvantagem é que você precisa ter acesso a uma versão linha-de-comando do php.

/opt/bin/php /web/moodle/admin/cron.php

Usando o programa crontab em Unix

Tudo que o Cpanel faz é fornecer uma interface web para uma utilidade do Unix conhecida como crontab. Se você tem um linha de comando, você mesmo pode configurar o crontab pelo comando:

crontab -e

e então adicionando um dos comandos acima como:

*/30 * * * * wget -q -O /dev/null http://example.com/moodle/admin/cron.php

As primeiras 5 entradas são os valores do tempo para execução, seguidas do comando a ser executado. O asterisco é um curinga, indicando qualquer valor. O exemplo acima significa rodar o comando wget -q -O /dev/null... a cada 30 minutos (*/30), toda hora (*), todos os dias do mês (*), todos os dias da semana (*).

O "O" em "-O" é a letra maiúscula, não zero, e faz referência a destinação do arquivo resultante (output file), nesse caso "/dev/null" que é um buraco negro e descarta esse resultado. Se você quiser ver o resultado do cron.php, insira a url dele no seu navegador.

Para iniciantes, "EDITOR=nano crontab -e" irá lhe permitir editar o crontab utilizando o editor nano. No Ubuntu o editor padrão já é o nano.

Geralmente, o comando "crontab -e" lhe colocará no editor 'vi'. Você entra em "insert mode" (modo de inserção) pressionando "i", então digite a linha exemplificada acima, depois saia do modo de inserção pressionando ESC. Você salva e sai digitando ":wq", ou sai sem salvar digitando ":q!" (sem as aspas). Aqui uma introdução ao editor 'vi'.

Ver também

Discussões do fórum Using Moodle: