script funciona manualmente, mas não no trabalho cron

1

Eu crio meus gráficos do sistema em rrd usando o script perl. Quando eu executar o script manualmente, ele atualizará os gráficos. Por outro lado, o cron mostra nos logs que o trabalho foi executado, mas não atualiza os gráficos. Alguma ajuda, por favor?

Defini a raiz da permissão do diretório apache2: apache com 770

Distro: CentOs 5.5.

Cron Config:

0,5,10,15,20,25,30,35,40,45,50,55 * * * *       /home/user/graphs/script-rrd.pl  > /dev/null 2>&1

Eu já verifiquei / var / log / cron ele mostra que o script acima foi executado mas não atualiza os gráficos em /var/html/www/graphs.png

Resolução deste problema:

cp -rf /opt/rrdtool-1.4.4/lib/perl/5.8.8/i386-linux-thread-multi/* / usr / lib / perl / site_perl

depois de copiar o material rrd no problema / usr / lib / perl5 / site_perl foi resolvido.

Eu já criei o PERL5LIB. Depois de criar o PERL5LIB, consegui executar scripts manualmente, mas ele não estava sendo executado pelo cron, e é por isso que copiei os arquivos como acima.

SELINUX é o seguinte: SELINUX = desativado SELINUXTYPE = segmentado SETLOCALDEFS = 0

    
por User4283 17.09.2010 / 01:03

6 respostas

6

Há um erro óbvio em sua linha do cron: você redireciona a saída do erro para /dev/null . Não faça isso e olhe seu e-mail para ver o que deu errado.

Um problema comum em tarefas cron é que elas obtêm um ambiente muito limitado: seu .profile não é lido. Você pode precisar definir algumas variáveis de ambiente para executar seu script.

ADICIONADO: Você fez:

cp -rf /opt/rrdtool-1.4.4/lib/perl/5.8.8/i386-linux-thread-multi/* /usr/lib/perl/site_perl

Má ideia! Você não deve colocar seus próprios arquivos em /usr (fora de /usr/local ). Essa área é reservada ao gerenciador de pacotes. Claro, agora é fácil, mas você terá problemas amanhã (por exemplo, quando você atualizar o rrdtool), e será difícil depurá-lo.

Em vez disso, faça o que as pessoas vêm recomendando e defina as variáveis de ambiente necessárias em seu script (ou fonte ~/.profile ); você precisa de PERL5LIB (e talvez outros).

    
por 17.09.2010 / 01:49
2

Meu primeiro palpite seria o caminho dos comandos chamados dentro do seu script. Ao chamar do cron, você não obtém as configurações de ambiente que o seu usuário faz, então eu recomendaria que cada comando seja chamado no script com um caminho completo especificado.

    
por 17.09.2010 / 01:32
1

crontab não sabe vars que o seu shell faria, uma vez que é executado sem shell. Então, se você executar comandos ... certifique-se de que seja o caminho completo ... se você ler ou gravar em arquivos ... certifique-se de referenciá-los via caminho completo também.

    
por 17.09.2010 / 05:12
0

qual distro, qual servidor cron, nos mostra a configuração da tarefa cron, verifique / var / log / cron, verifique / var / log / messages. a maioria das distros tentará enviar os erros do cron para o usuário que os executou, verifique / var / spool / mail / (ou configure a entrega de mensagens).

    
por 17.09.2010 / 01:11
0

Não relacionado, mas você pode substituir 00.05,10,15 .. etc com * / 5: -)

    
por 17.09.2010 / 11:11
0

Isso parece muito com uma negação do SELinux.

    
por 18.09.2010 / 18:57

Tags