Os resultados do trabalho Cron são diferentes de executar a partir do próprio shell

3

Estou usando o Ubuntu 12.0.4 Eu tenho um script basicamente com os seguintes códigos:

lockfile=/var/tmp/mylock

if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then
    exit_normally "instance is running"
else
    echo "no instance is running"
fi

O arquivo / var / tmp / mylock não existe no meu sistema, então quando eu executo meu script manualmente eu recebo "nenhuma instância está em execução", o que é correto.

Mas quando o script de shell é executado pelo cron, ele sempre retorna "instance is running"

Não sei ao certo para onde verificar ou o que procurar para encontrar a causa raiz do problema acima, espero obter algumas sugestões aqui.

    
por forestclown 07.06.2013 / 14:06

1 resposta

3

Como prática geral, criar um arquivo e esperar que o sistema operacional não o destrua caso exista não é uma boa maneira de testar se ele existe.

Você estaria melhor servido com:

if [ -f $lockfile ]; then
  exit_normally "instance is running"
else
  echo "no instance is running"
fi

No entanto, se você está tentando usar a existência de um arquivo como um arquivo de travamento, provavelmente seria melhor usar o comando unix lockfile:

lockfile -r 0 $lockfile
if [ $? -ne 0 ]; then
  exit_normally "instance is running"
else
  echo "no instance is running"
fi
    
por 07.06.2013 / 18:06

Tags