Сценарий оболочки, выполняемый с cron, приводит к разному размеру файла, чем выполняется вручную

У меня есть сервер RHEL, на котором я запускаю базу данных MySQL. У меня есть сценарий Bash, который выполняет mysqldump который создает файл резервной копии. Файл резервной копии, созданный при выполнении скрипта непосредственно в Bash, имеет размер 754259 байт. Если один и тот же скрипт запускается через cron, размер составляет всего 20 байтов.

Насколько мне известно, cron работает с тем же контекстом пользователя, который я использую при входе в систему, чтобы запустить скрипт вручную. Однако, учитывая разницу в размерах, это не кажется истинным.

Почему размеры файлов различны при запуске одного и того же скрипта?

Содержимое сценария оболочки:

 backup_path=/var/custom/db_backups configFile=/var/custom/auth.cnf db_name=[db_name] date=$(date +"%d-%b-%Y") sudo /opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9 > $backup_path/$db_name-$date.sql.gz 

Для редактирования cron:

 sudo crontab -e 

Содержимое файла cron:

 12 21 * * * /var/custom/maint_plan 

Это выполняет скрипт ежедневно в 9:13 вечера.

3 Solutions collect form web for “Сценарий оболочки, выполняемый с cron, приводит к разному размеру файла, чем выполняется вручную”

Команда mysqldump ничего не возвращает, которая передается через gzip и заканчивается пустым файлом gzip. Видеть:

 $ echo -n "" | gzip -9 > test.gz $ stat -c %s test.gz 20 

В результате получается файл размером 20 байт. Таким образом, проблема заключается в команде mysqldump . Так как это crontab root, скрипт работает с привилегиями root. sudo не требуется. Используйте его без sudo . Просто:

 /opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9 > $backup_path/$db_name-$date.sql.gz 

Скрипт, выполняемый через cron, терпит неудачу. 20 байтов – это размер пустого дампа MySQL.

Среда, в которой cron запускает скрипты, очень ограничена. Возможно, он не найдет все необходимые программы. Захватите переменные среды оболочки, в которых вы получаете хороший дамп и переносите это на свой скрипт cron.

  • скрипт i3status, который сам по себе изменяет свой текст
  • Дэш-эквивалент саморасправки выхода скрипта
  • Использование sed для замены строки со многими специальными символами?
  • Как создать имя файла для моего приложения электронной почты?
  • Есть ли способ запустить зашифрованный (GPG) файл на лету в сценарии?
  • Есть ли более элегантный способ подсчета слов и присвоение этому числу переменных?
  • Создание сценария оболочки внутри текстового редактора
  • setenv внутри скрипта не переопределяет значение, заданное в командной строке
  • Эффективное использование dd (буфер много блоков, процесс по одному)
  • Запросить пользователя для предложения и сохранить его, не нарушая пространства
  • Что означает `{{(выход 1); выход 1; }; } `означает?
  • Linux и Unix - лучшая ОС в мире.