Я запланировал задачу каждые 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