O que acontece quando fazes o seguinte comando na linha de comandos?
$ /usr/bin/lynx -source /var/www/drupal-6.17/cron.php
2010/6/17 Carlos Aboim <abo...@gmail.com>:
> --
> Recebeu esta mensagem porque está inscrito no grupo "Drupal Portugal" dos Grupos do Google.
>
> Para publicar uma mensagem neste grupo, envie um e-mail para drupal-...@googlegroups.com.
> Para anular a inscrição neste grupo, envie um e-mail para drupal-portug...@googlegroups.com.
> Para ver mais opções, visite este grupo em http://groups.google.com/group/drupal-portugal?hl=pt-PT.
>
>
> Sim tenho a localização lynx esta correcta
>
> o output é este:
>
> <?php
> // $Id: cron.php,v 1.36 2006/08/09 07:42:55 dries Exp $
>
> /**
> * @file
> * Handles incoming requests to fire off regularly-scheduled tasks
> (cron jobs).
> */
>
> include_once './includes/bootstrap.inc';
> drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
> drupal_cron_run();
>
> Penso que é o que está dentro do script cron.php
Isso quer dizer que o lynx está a considerar o ficheiro PHP como um
ficheiro de texto e não como um ficheiro PHP. Era preciso analisar os
headers alguma coisa está mal.
Sugiro usar antes o wget. Aparece alguma coisa nos logs? É possível
invocar o cron de maneiras várias. Pode-se usar o drush, ou ir até
admin/reports/status
e invocar o cron manualmente. O job está instalado?
Fazendo crontab -l aparece listado?
Com o wget é: wget -O - -q -t 1 http://omeusite/cron.php
--- appa
/usr/bin/lynx -source /var/www/drupal-6.17/cron.php
Obviamente que o lynx está-te a devolver a source do ficheiro, é como abrires
no Firefox com file:///var/www/drupal-6.17/cron.php
Se queres correr directamente o script do sistema de ficheiros, teria
que ser algo como:
$ /usr/bin/php /var/www/drupal-6.17/cron.php
Se é para correr com o lynx ou wget (browsers em modo de texto), tens
que fazer algo como
$ /usr/bin/lynx -source http://example.com/drupal-site/cron.php
2010/6/17 Carlos Aboim <abo...@gmail.com>:
$ cd /var/www/drupal-6.17/
$ /usr/bin/php cron.php
Se tudo correr bem, tenta por assim no cron:
59 * * * * cd /var/www/drupal-6.17/ ; /usr/bin/php cron.php ; cd -
2010/6/18 Carlos Aboim <abo...@gmail.com>:
$ cd /var/www/drupal-6.17/
$ /usr/bin/php cron.php
???
2010/6/21 Carlos Aboim <abo...@gmail.com>:
Como assim? Podes explicar melhor esta parte?
Mas estamos a falar da mesma instalação do Drupal (confirmas que ele
actualiza a base de dados correcta)?
Mas então ele está disponível via web!
Usando esse link (de quando clicas manualmente) ele funciona....
Quer dizer que está disponível num URL.
Então e o que acontece se correres o comando:
$ lynx -source http://www...................../cron.php
(onde http://www...................../cron.php é o mesmo link que
quando clicas para ele correr manualmente no status report)
> Mas automaticamente ele não arranca. Acho que é um problema de SO.
> Tenho que fazer uma investigação na web como configurar o cron para
> debian
Para veres se ele está a correr, põe este linha (por exemplo) no crontab:
* * * * * touch /tmp/teste
E vê se ele cria o ficheiro /tmp/teste e/ou se actualiza a data do ficheiro.
>
> continuo aberto a sugestões e criticas
>
> On 21 Jun, 15:22, Diana Soares <diana.soa...@gmail.com> wrote:
>> 2010/6/18 Carlos Aboim <abo...@gmail.com>:
>>
>> > Pois.. esqueci-me de dizer que cron.php é um ficheiro local
>> > ou seja está no disco do sistema e não na web
>>
>> Como assim? Podes explicar melhor esta parte?
>> Mas estamos a falar da mesma instalação do Drupal (confirmas que ele
>> actualiza a base de dados correcta)?
>
> fiz o exercicio anterior onde em vez the utilizar o touch utilizei o
> echo e o cron criou o ficheiro 'teste' logo posso concluir que o
> deamon esta a trabalhar Estou inclinado para que seja de facto um
> problemas de permissões do ficheiro cron.php que não tinha direitos
> de 'executar' para ninguem.
Atenção que o cron.php é um ficheiro de código PHP *normal*. Não é um
script, i.e., não deve ter nenhuma permissão de execução para ninguém.
O bit de execução *não deve* estar activo para o dono, grupo ou
outros.
Não tenho experiência nenhuma com o lynx, só com o wget. A mim
parece-me ser um problema de directórios trocados.
Onde é que o drupal está instalado?
Por regra é má ideia entupir a /var/www com ficheiros. A maneira como
costumo fazer é criar um symlink de /var/www/sites para uma área de
utilizador normal onde estão os ficheiros drupal.
É possível usar a ~<username>/public_html com o módulo userdir
activado no Apache. De notar que é preciso na directiva Virtual Hosts
autorizar o override por causa do .htaccess em cada directório.
AllowOverride All
Nesse caso há também questões de permissões com o settings.php e com a
directoria files. O primeiro tem que ter (no Debian) o www-data como
dono e o grupo do utilizador; a files e todas as que estão por baixo
têm que ter 2770 (setgid - pelo menos) com <utilizador>.www-data como
owner.grupo.
> Alterei e agora vou aguardar mais um pouco para saber se funciona,
> modifiquei as definições para mudar de hora a hora.
> Ja 'post(o)' o resultado
--- appa
> continua a não funcionar....
>
> Directiva no crontab:
> 5 * * * * /usr/bin/lynx -source /var/www/drupal-6.17/cron.php
> #alterei para actualizações a cada 5 min
^^^^^^^^^^^^^^^^^^^^^^^^^^
Não. Actualização a cada 5 min é:
*/5 * * * * /usr/bin/lynx -source /var/www/drupal-6.17/cron.php
O cron trabalha com a divisão de inteiros. Sempre que o resto é zero
executa.
5 * * * * /usr/bin/lynx -source /var/www/drupal-6.17/cron.php
Quer dizer execução aos 5 minutos de cada hora, cada dia de cada
dia da semana, cada mês, e.g., 10h05, 11h05, &c.
O problema não é no cron, o problema é no cron.php. Se o problema
fosse no cron era enviado um mail ao dono do cronjob a dizer que o
cron não tinha executado. Por exemplo se parares o mysqld e o cron
tentar executar o job do Drupal vais receber um mail a dizer que o cron
não conseguiu executar.
Ok. Estive a espreitar o script para o lynx que na directoria scripts
do Drupal. Sempre me pareceu estranho o lynx ir directo ao filesystem
em vez de passar via o servidor HTTP.
Estou a tatear porque não tenho experiência nenhuma com o lynx e o drupal.
Experimenta assim:
*/2 * * * * /usr/bin/lynx -source http://example.com/cron.php > /dev/null 2>&1
Em que example.com deve ser substituido pelo endereço do site na máquina.
Vai executar todos os 2 minutos. Vê o log do watchdog e vê se aparece
a execução do cron bem sucedida.
--- appa
> /dev/null 2>&1 está a redireccionar toda a saída para o /dev/null.
Seja o stderr, seja o stdout.
/usr/byn/lynx -source www.nomedosite.com/cron.php ?
Hernani
/usr/bin/lynx -source /var/www/drupal-6.17/cron.php
--
> o engraçado de tudo é que se eu puser este codigo
>
> /usr/bin/lynx -source /var/www/drupal-6.17/cron.php
>
> na linha de comandos ele apresenta-me o codigo que está dentro do
> ficheiro: cron.php
>
> o que quer dizer que por algum motivo ele nao está a aceitar o
> cron.php como executavel (penso eu!)
O cron.php não é executável.
Foi colocado o URL e não o path do filesystem como acima?
--- appa
> Sim é isto que eu tenho la no crontab:
>
> */2 * * * * /usr/bin/lynx -source /var/www/drupal-6.17/cron.php
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> o que é o path do filesystem?
É o que está acima.
*Não usar*, repito, não usar o path mas sim o *URL*, e.g.:
*/2 * * * * /usr/bin/lynx -source http://omeusite.com/cron.php
^^^^^^^^^^^^
Qual é o URL de acesso ao site? Para ver o site no browser qual o URL?
--- appa
> Obrigado Antonio, ja funciona!
>
> Podes explicar nos como funciona?
> Como é que o cron.php é chamado se nós não lhe damos o caminho
> completo?
Não precisa porque através do server ele resolve o path. Não quer
saber qual é o path real. Na directiva VirtualHost do Apache o URL é
traduzido num path no filesystem através do DocumentRoot.
Suspeito que algo do género:
*/2 * * * * cd /var/www/drupal-6.17 && /usr/bin/php cron.php
Também funcione. A razão porque não funcionava (creio) era porque o
cron não encontrava a directoria de includes do Drupal.
Volta a passar o cron.php para 644. Não é executável nenhum.
chmod 644 cron.php
É um ficheiro cujo código faz o boostrap do Drupal por completo e
depois invoca todas as implementações da hook_cron():
http://api.drupal.org/api/function/hook_cron/6
através da função:
http://api.drupal.org/api/function/drupal_cron_run/6
--- appa