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

Crontab не запускается, ошибок нет

У меня есть конфигурация crontab ниже;

45 9 * * * sh /home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log

И мой сценарий выглядит так:

#!/bin/bash
### Backup Folder dir ###
BAK="/var/www/backup/mysql/"
GZIP="$(which gzip)"
### FTP SERVER Login Stuff###
FTPU="someuser1"
FTPP="somepass1"
FTPS="someftpsite1"
FTPUU="someuser2"
FTPPP="somepass2"
FTPSS="someftpsite2"
NOW=$(date +"%d-%m-%Y")


[ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/*

mysqldump -u root -h localhost --all-databases | gzip -9 > /var/www/backup/renko_backup_$NOW.sql.gz

lftp -u $FTPU,$FTPP -e "mput /var/www/backup/renko_backup_$NOW.sql.gz; quit" $FTPS >  /home/renko/mysql_back_log.log
lftp -u $FTPUU,$FTPPP -e "cd some_dir;mput /var/www/backup/renko_backup_$NOW.sql.gz; quit" $FTPSS >  /home/renko/mysql_back_log.log
mutt -s "database backup" somemail1@gmail.com  -a /var/www/backup/renko_backup_$NOW.sql.gz >  /home/renko/mysql_back_log.log
mutt -s "Sunucu yedekleme" somemail2@gmail.com -a /var/www/backup/renko_backup_$NOW.sql.gz >  /home/renko/mysql_back_log.log

Если я использую команду mysql.backup.sh, как показано ниже:

sudo sh /home/renko/mysql.backup.sh

скрипт работает отлично ... Однако crontab почему-то не заставляет этот скрипт работать. Я не могу найти журнал ошибок crontab. Да, и прежде чем вы спросите, я добавил работу в crontab через;

sudo crontab -e

и перезапустили службу cron через;

sudo service cron restart

Кажется, я не могу найти проблему. Я использую Ubuntu Server с ядром 2.6.38-8. Приветствуются любые советы и ссылки на любой источник.

Пара вещей, которые нужно проверить. Вам не нужен sh поскольку команды в crontab в любом случае передаются оболочке. Ваша конкретная проблема, вероятно, может быть решена с помощью -c флаг например

45 9 * * * sh -c "/home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log"

Это указывает sh читать команды из командной строки, а не из stdin.

Обычно вы использовали бы

45 9 * * * /home/renko/mysql.backup.sh > /home/renko/mysql_back_log.log

Обновление 1:

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

Обновление 2: Из комментариев.

Убедитесь, что у вашего пользователя есть права на запись в каталог, содержащий файл журнала. Также убедитесь, что у вашего пользователя как минимум x разрешение на каталоги в пути к вашему файлу журнала.

Пока мы проверяем данные, можем ли мы использовать наименьший общий знаменатель? Поместите в crontab

* * * * *  /bin/touch /tmp/nose

Если бы вы могли сначала сделать /bin/touch /tmp/nose ; ls -al /tmp/nose ; rm /tmp/nose так что мы можем проверить /tmp существует и доступен для записи во всем мире (вы будете удивлены), то мы, по крайней мере, можем сказать, является ли проблема cron или чем-то особенным для вашего скрипта.

редактировать: ОК, это прогресс. А теперь можем мы поговорить о сроках написания вашего сценария? Не могли бы вы добавить

45 9 * * *  /bin/touch /tmp/toes

в ваш crontab? Таким образом, мы можем подтвердить, что cron считал, что вещи, которые должны сработать в то время, например ваш скрипт, действительно должны были сработать.