php /var/www/html/*.php não está funcionando no terminal que está aberto a partir do Menu php * .php está funcionando no terminal que está aberto dentro da pasta de espera php

4

Eu quero executar um script PHP do cron. Eu configurei o cron com:

*/1 * * * * php  /var/www/html/cron/cron_job.php

E eu posso ver em crontab -u root -l , mas o trabalho não é executado. Também não funciona quando eu executo o comando diretamente da linha de comando assim:

<?php  /var/www/html/cron/cron_job.php

Eu tentei muitas respostas relacionadas ao cron, mas nada funcionou. Por exemplo:

/usr/local/bin /var/www/html/cron/cron_job.php
/usr/local/bin/php /var/www/html/cron/cron_job.php
sudo php -f /var/www/html/cron/cron_job.php

O script php de teste ( cron_job.php ) é:

php file_put_contents  ('test.txt',"test content\n",FILE_APPEND);  

As permissões de arquivo estão todas OK e estão funcionando quando são executadas no navegador ou ao abrir um terminal em /var/www/html/cron/ e executando php cron_job.php .

Conforme solicitado nos comentários, se eu anexar 2> /tmp/php.log a php /var/www/html/cron/cron_job.php usar um script com um erro de sintaxe e tentar executar ( php /var/www/html/cron/cron_job.php 2> /tmp/php.log ) a partir do terminal de menu, o log de erros receberá a mensagem de erro.

    
por Naga 25.01.2017 / 10:32

2 respostas

11

Seu script quase certamente está em execução e criando seu arquivo. Apenas não está criando onde você espera que seja. Você não está usando nenhum caminho em seu script, apenas usa um nome de arquivo. Isso significa que o arquivo será criado no diretório em que o script está sendo executado.

É por isso que, quando você entra em um diretório específico e executa o script, acha que funciona. Porque o arquivo é criado no diretório em que você o executou e assim você pode vê-lo. Por padrão, cron é executado no diretório inicial do usuário que o executa. Como esse é o crontab do root (que, a propósito, é uma má idéia), o arquivo será criado em /root . Então, vá checar:

sudo ls /root/test.txt

Então, da próxima vez, dê ao seu script um caminho completo em vez de apenas um nome de arquivo:

<?php file_put_contents  ('/path/to/test.txt',"test content\n",FILE_APPEND); ?>

Agora, o arquivo será criado em /path/to .

    
por terdon 25.01.2017 / 11:12
6

Por padrão, as tarefas Cron são executadas no diretório pessoal do usuário. Enquanto no seu script não for fornecido o caminho onde o arquivo de saída será salvo, ele será salvo no diretório onde o script é executado.

No seu script PHP, o caminho para o arquivo test.txt está faltando. Você pode defini-lo como valor absoluto, como é descrito na resposta do @terdon, ou você pode fornecê-lo como caminho relativo (com origem própria). Por exemplo, se test.txt shuld estiver localizado no mesmo diretório que cron_job.php , o conteúdo do seu script deverá se tornar algo como:

<?php 
    $path = realpath(dirname(__FILE__)); 
    file_put_contents  ("$path/" . 'test.txt',"test content\n",FILE_APPEND);
?>

Como alternativa, se você não quiser alterar o script, altere o trabalho Cron dessa maneira:

*/1 * * * * cd /var/www/html/cron/ && php cron_job.php
    
por pa4080 25.01.2017 / 11:14

Tags