Mysqldump создает пустой файл при запуске через cron в linux

у меня есть сценарий bash mysql_cron.sh это работает mysqldump

#!/bin/bash
/usr/local/mysql/bin/mysqldump -ujoe -ppassword > /tmp/somefile

Это прекрасно работает. Затем я вызываю его из cron:

20 * * * * /home/joe/mysql_cron.sh

и это создает файл / tmp / somefile, но файл всегда пуст. Я попытался добавить

source /home/joe/.bash_profile 

к скрипту, чтобы убедиться, что cron имеет правильные переменные env, но это не помогает. Я вижу, что многие другие люди имеют эту проблему, но не нашли решения. Я также попробовал оператор ' > ' в crontab для cat любые ошибки cron в файле, но это, похоже, не генерирует никаких ошибок. Любые идеи по устранению неполадок приветствуются. Спасибо!

2 ответов


добавить вывод информации об ошибке в файл (как сказал Damp), чтобы вы могли проверить, есть ли какая-либо ошибка:

#!/bin/bash
/usr/local/mysql/bin/mysqldump -ujoe -ppassword > /tmp/somefile 2>&1

вы также можете взглянуть на файлы журнала MySQL в /var/log в случае, если есть какой-то намек есть.


добавьте эту строку в свой скрипт и сравните результат между запуском его из cron и запуском его напрямую:

env > /tmp/env.$$.out

на $$ будет заменен в результирующем имени файла PID родительского процесса (cron или оболочки). Вы должны быть в состоянии diff два файла и посмотреть, если ничего существенного различия между двумя средами.