A execução de um programa chamado por um shell chamado crontab retorna o código 127

2

Estou preso ao seguinte problema (simples): Eu quero um script para ser executado a cada 10 minutos. Este script chama arquivos executáveis. Eu uso crontab e ksh em um sistema AIX 5.3.

O script faz uso de caminhos relativos, mas a alteração do caminho do executável para absoluto não fez nenhuma diferença. Então, depois de algumas tentativas e esta resposta , eu criei a seguinte entrada crontab (* / 10 não funciona)

rs14:/home/viloin# crontab -l
0,10,20,30,40,50 * * * * cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh

aqui está o script:

#!/bin/ksh

Main(){
  printf "executed in : %s\n" $(pwd);
  executableFile 2>/dev/null 1>&2;
  exeResult=$?; # expected return value : 90
  printf "%s\n" $exeResult;
}

Main;

Aqui está a saída quando eu executo o comando manualmente:

rs14:/home/viloin/cardme/bin# cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh
executed in : /home/viloin/cardme/bin
90

E finalmente a saída quando o crontab o executa para mim (do email):

 Subject: Output from cron job cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh, [email protected], exit status 0

Cron Environment:
 SHELL = /usr/bin/sh
 PATH=/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:/usr/java14/jre/bin:/usr/java14/bin
 CRONDIR=/var/spool/cron/crontabs
 ATDIR=/var/spool/cron/atjobs
 LOGNAME=viloin
 HOME=/home/viloin

Your "cron" job executed on rs14.saprr.local on Wed Aug 24 11:50:00 CEST 2016
cd /home/viloin/cardme/bin && /bin/ksh myScript.ksh


produced the following output:

executed in : /home/viloin/cardme/bin
127


*************************************************
Cron: The previous message is the standard output
      and standard error of one of your cron commands.

Meu arquivo myScript.ksh tem todos os direitos:

rs14:/home/viloin/cardme/bin# ll -al myScript.ksh
-rwxrwxrwx    1 viloin   cardme          174 Aug 24 10:54 myScript.ksh

Para ter certeza de que meu executableFile não está realmente saindo com o código 127, usei os binários de echo, renomeiei e tenho o mesmo comportamento (exceto que ele retorna 0 em vez de 90 quando eu executo o comando manualmente).

O que está causando essa diferença entre digitar manualmente o comando e pedir ao crontab para fazer isso por mim?

    
por Etsitpab Nioliv 24.08.2016 / 12:04

1 resposta

2

altere seu script de shell para fornecer um caminho completo ou relativo para o executável:

./executableFile ...

No uso interativo, você deve ter . ou o diretório cardme/bin em seu PATH: isso não será verdadeiro no ambiente do cron.

    
por 24.08.2016 / 15:07