Diferença de executar scripts manualmente ou com um cronjob

3

Eu tenho um script PHP que eu quero executar a cada 10 minutos, passando por registros de banco de dados e criando / editando filmes através do MEncoder. Eu configurei o cron job para fazer isso, mas não funciona muito bem.

Eu tenho meu script PHP, chame-o document.php. Eu também tenho um script bash (document.sh) para chamar este script PHP;

#!/bin/bash
php document.php

Agora vem a parte estranha: Quando eu executo manualmente o script bash, tudo funciona muito bem - os filmes são criados ou editados do jeito que eu quero - mas quando deixo o cron executar o script bash a cada 10 minutos, os filmes são corrupto. Eles têm alguns quadros neles, no entanto. Eu não tenho ideia de como isso pode acontecer. Eu verifiquei as permissões e os caminhos de arquivo e tudo parece bem. O trabalho do cron mata meu processo? Tem um limite de tempo (demora cerca de 1-2 minutos para executar o MEncoder através dos arquivos)?

Espero que alguém possa fornecer uma resposta - isso realmente me incomoda e o prazo está próximo.

Estou executando o Ubuntu Server com as atualizações mais recentes e o mais recente MEncoder do repo.

Atenciosamente, Björn

    
por Björn 18.12.2009 / 17:34

5 respostas

8

A execução do cron não puxa os arquivos de configuração do shell (~ / .bashrc ou ~ / .profile ou / etc / profile) É possível que variáveis de ambiente definidas lá estejam afetando o seu trabalho? Tente pesquisar seus arquivos de perfil manualmente no início do seu script. ( . /path/to/profile )

    
por 18.12.2009 / 17:48
3

Esse é um problema muito comum com cronjobs - você simplesmente não pode assumir suas variáveis de ambiente, caminhos, etc. O que eu gosto de fazer é ter um cronjob que faça "set > /tmp/set" para que você possa ver exatamente o que você está indo tem do ponto de vista do cronjob. Dessa forma, você pode comparar as suposições feitas pelo seu script e quais ajustes precisam ser feitos.

    
por 18.12.2009 / 21:17
1

Minha solução simples é chamar o arquivo php com o LYNX Supondo que você tenha um servidor http em execução

lynx link

    
por 19.12.2009 / 04:35
0

Não deve haver nenhum limite de tempo - pelo menos por padrão, não tenho certeza sobre essa distro. Você recebe o email do cron? Caso contrário, redirecione o stdin / stdout para um arquivo e veja o que o processo diz.

your-cmd  > filename.txt 2>&1
    
por 18.12.2009 / 23:09
0

Como outros afirmaram, o problema mais provável é a falta de algumas variáveis de ambiente. Se não é isso, a outra possibilidade que consigo pensar é: você tem certeza de que o trabalho leva apenas de 1 a 2 minutos? se for preciso > 10 (seu intervalo para reaparecer), você pode acabar com várias execuções tentando modificar os mesmos arquivos, o que poderia causar alguns dos danos que você mencionou.

A depuração do cron é sempre ... divertida. primeiro, verifique o email do root nesse sistema; se o cron job colocar qualquer coisa no stdout, ele deve estar lá. Se nada de útil aparecesse lá, você pode fazer algo aparecer colocando alguma saída de depuração em seu script.

    
por 19.12.2009 / 19:43