Crontab não está executando um script

2

Eu configurei meu crontab para executar o script 2:

$ crontab -l
0 20 * * * /usr/bin/bkp.sh --silent > /home/perforce/logs/bkp.log 2>&1
0 21 * * * /usr/bin/flsbk.sh --silent > /home/perforce/logs/flsbk.log 2>&1 

O primeiro script não está sendo executado.

Eu configurei em crontab -e não sudo crontab -e

O erro que tenho é isso. De /home/perforce/output.log :

====================================================================================

Starting Backup

====================================================================================

Output location:  /home/perforce/output.log

Running p4 verify...
/usr/bin/bkp.sh: line 22: p4: command not found
Done! (No error)

Running p4 admin checkpoint...
/usr/bin/bkp.sh: line 46: p4: command not found
Done!
/usr/bin/bkp.sh: line 51: p4: command not found
 (Error)

E meu roteiro é este:

#!/bin/bash

echo
echo "===================================================================================="
echo "Starting Backup"
echo "===================================================================================="

# Defines output folder and log name
OUTPUT_FOLDER='/home/perforce/'
OUTPUT_FILE='output.log'

OUTPUT=$OUTPUT_FOLDER$OUTPUT_FILE

echo "Output location: " $OUTPUT

# Creates a temp file
TMPFILE='mktemp'

echo -n "Running p4 verify..."

# Run the p4 and send the output to the temp file
p4 verify -q //... > $TMPFILE

echo -n " Done!"

# Check if it's empty (no error)

# Copy the content to another variable, so we don't mess up with the original output
RESULT='cat $TMPFILE'

if [ "$RESULT" != "" ];
then
  echo " (Error, saving to log)"

  # Save error on output file
  'echo $RESULT > $OUTPUT'

  exit
fi

echo " (No error)"

echo -n "Running p4 admin checkpoint..."

# Run the p4 and send the output to the temp file
p4 admin checkpoint > $TMPFILE

echo -n "Done!"

# The file created by the last command
COUNTER='p4 counter journal'

FILE=/perforce_depot/checkpoint.$COUNTER

# Check if the file was created
if [ -f "$FILE" ]
then
  echo " (No error)"
else
  echo " (Error)"
  exit
fi

echo  -n "Backing up ..."

# Finaly, let's create the backup
#'cp -r /perforce_depot  '/media/perforce/Seagate Backup Plus Drive/perforcebk''
START=$(date +%D)

FOLDER_NAME='echo $START | tr -s '/' | tr '/' '_''
FOLDER_PATH='/media/perforce/BackupDrive/perforcebk'
BACKUP_PATH=$FOLDER_PATH/bkp_$FOLDER_NAME

mkdir -p $BACKUP_PATH

cp -r /perforce_depot $BACKUP_PATH

echo " Done!"

p4 está localizado em /usr/local/bin

Alguém tem alguma idéia de por que estou recebendo esse erro? Se eu ssh para a máquina e executar manualmente sh bhp.sh ele roda sem nenhum problema e nenhum erro.

    
por Savio Da Silva 17.05.2013 / 14:34

2 respostas

1

Os scripts Cron não são executados no seu ambiente 'normal'. A saída afirma claramente:

 /usr/bin/bkp.sh: line 22: p4: command not found

E você disse:

  

p4 está localizado em /usr/local/bin

Isso pode significar apenas que $PATH não inclui /usr/local/bin , isso é tudo. Então, modifique seu script cron e adicione isso depois do seu shebang:

#!/bin/bash

set -e
PATH="/usr/local/bin:$PATH"

Observação: set -e fará com que seu script seja encerrado se alguns comandos falharem. Não é necessário resolver o seu problema específico, mas pode resolver muitas dores de cabeça no futuro. Considere usá-lo em todos os seus scripts.

    
por Andrea Corbellini 17.09.2013 / 13:54
-1

Eu acho que o seu script funcionará se você não usar as declarações 'echo'. Eu me deparei com um problema semelhante ao executar um par de scripts python no crontab. Eu acredito cron executa uma instância do terminal sem suporte para IO para a tela. Se você precisar armazenar qualquer informação que estivesse sendo impressa na tela, deverá anexá-la a um arquivo de log.

Espero que ajude, Matt

    
por mjwittering 17.09.2013 / 13:35