Пара вещей, которые нужно проверить. 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 / нос; ls -al / tmp / нос; rm / tmp / нос
, чтобы мы могли проверить, что / tmp
существует и доступен для записи во всем мире (вы будете удивлены), тогда мы сможем по крайней мере сказать, является ли проблема cron или чем-то особенным ваш сценарий.
Редактировать : Хорошо, это прогресс. А теперь можем мы поговорить о сроках написания вашего сценария? Не могли бы вы добавить
45 9 * * * /bin/touch /tmp/toes
в свой crontab? Таким образом, мы можем подтвердить, что cron считал, что вещи, которые должны сработать в то время, например ваш скрипт, действительно должны были сработать.