Назад | Перейти на главную страницу

Работа cron не работает

Я запланировал задачу каждые 5 минут в своем crontab.

Задача хорошо спланирована путем активации журнала cron в rsyslog и проверки его выполнения в соответствии с планом:

- Right user
- Right command

Примеры записей журнала:

Dec 23 06:40:01 computer /USR/SBIN/CRON[26422]: (myuser) CMD (bash /home/myuser/save.sh &>/home/myuser/cron.log)

Я даже пробовал:

Dec 23 06:40:01 computer /USR/SBIN/CRON[26422]: (myuser) CMD (/home/myuser/save.sh &>/home/myuser/cron.log)

Пример команды crontab:

*/5 * * * * /home/myuser/save.sh &>/home/myuser/cron.log

Скрипт имеет правильные права: он может быть выполнен myuser

Пример сценария:

#!/bin/sh

HOME_DIR="/home/$USER"
LOGFILE=save.log
DIR_NAME="mydir"
VOLATILE="$HOME_DIR/$DIR_NAME/"
PERMANENT="$HOME_DIR/$DIR_NAME""_storage/"

if [ ! -d "$PERMANENT" ]; then
    mkdir "$PERMANENT"
fi

echo `date +%x\ %X`>$HOME_DIR/$LOGFILE
# Check if both directories actually exist
if [ -d "$VOLATILE" -a -d "$PERMANENT" ]; then
    # Control will enter here if both $VOLATILE and $PERMANENT exist.
    rsync -r -t -v "$VOLATILE" "$PERMANENT">$LOGFILE.output
    echo OK>>$HOME_DIR/$LOGFILE
else
    echo KO>>$HOME_DIR/$LOGFILE
    if [ ! -d "$VOLATILE" ]; then
        echo "Volatile dir does not exist">>$HOME_DIR/$LOGFILE
    fi
    if [ ! -d "$PERMANENT" ]; then
        echo "Permanent dir does not exist">>$HOME_DIR/$LOGFILE
    fi
fi

Команда представляет собой сценарий bash, который правильно выполняется вручную с тем же пользователем (даже если я копирую и вставляю точную команду, выполненную в cron), но ничего не делает автоматически.

Я перенаправляю вывод скрипта в специальный файл журнала, чтобы проверить его выполнение, который остается пустым, когда происходит автоматическое выполнение.

Я полностью потерялся, я не знаю, что случилось.

Что я забываю?

[EDIT] Я использую Debian 6 Squeeze

Вам не хватает новой строки в конце задания в вашем crontab?

Что показывает "crontab -l"?

У меня была такая же проблема, и я исправил ее, удалив "." от имени файла. В вашем случае должно быть:

*/5 * * * * /home/myuser/save &>/home/myuser/cron.log