Crontab не запускает скрипт

Я настроил свой crontab для запуска 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 

Первый скрипт не запущен.

Я настроил на crontab -e, а не sudo crontab -e

У меня есть ошибка. Из /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)

И мой сценарий таков:

#!/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 находится в /usr/local/bin

Любой кто-либо имеет представление, почему я получаю эту ошибку? Если я ssh к машине и запускаю вручную sh bhp.sh, он работает без проблем и ошибок.

2
задан 17 September 2013 в 15:50

2 ответа

Сценарии Cron не запускаются в вашей «нормальной» среде. Вывод четко гласит:

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

И вы сказали:

p4 находится в /usr/local/bin

Это может означать просто что $PATH не включает /usr/local/bin, вот и все. Поэтому измените ваш скрипт cron и добавьте его после своего шебанга:

#!/bin/bash

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

Примечание: set -e заставит ваш скрипт завершиться в случае сбоя некоторых команд. Это не требуется для решения вашей конкретной проблемы, но это может решить много головных болей в будущем. Попробуйте использовать его во всех своих сценариях.

0
ответ дан 17 September 2013 в 15:50

Я думаю, что ваш скрипт будет работать, если вы не используете операторы 'echo'. Я сталкивался с подобной проблемой при запуске нескольких скриптов на Python в crontab. Я считаю, что cron запускает экземпляр терминала без поддержки ввода-вывода на экран. Если вам нужно сохранить какую-либо информацию, которая выводилась на экран, вы должны добавить ее в файл журнала.

Надеюсь, что помогает, Мэтт

0
ответ дан 17 September 2013 в 15:50

Другие вопросы по тегам:

Похожие вопросы: