Я использую сценарий bash (sync.sh), используемый cron, который должен синхронизировать файл с базой данных MySQL. Он работает путем копирования файла из автоматически загруженного места, его анализа путем вызова сценария SQL, который вызывает другие сценарии, хранящиеся внутри MySQL, и в конце отправляет по электронной почте текстовый файл отчета в качестве вложения.

Но, похоже, что-то не работает, так как с базами данных MySQL ничего не происходит. Все остальные команды выполняются (первая и последняя строка: копирование исходного файла и отправка электронной почты). Команда MySQL при отдельном запуске работает отлично. Сервер - Ubuntu 16.04. Задание Cron запускается от имени пользователя root, а сценарий является частью crontab для пользователя root.

Вот сценарий:

#!/bin/bash
cp -u /home/admin/web/mydomain.com/public_html/dailyxchng/warehouse.txt /var/lib/mysql-files
mysql_pwd=syncit4321
cd /home/admin/web/mydomain.com/sync
mysql -u sync -p$mysql_pwd --database=database_name -e "call sp_sync_report();" > results.txt
echo "<h2>Report date $(date '+%d/%m/%Y %H:%M:%S')</h2><br/><br/> <strong>results.txt</strong> is an attached file which contains sync report." | mutt -e "set content_type=text/html" -s "Report date $(date '+%d/%m/%Y %H:%M:%S')" -a results.txt -- recipient@mydomain.com
0
Wed 14 Фев 2018 в 18:52

1 ответ

Лучший ответ

Cron выполнит скрипт в очень урезанной среде. вы, вероятно, захотите добавить полный путь к команде mysql в скрипт cron

Вы можете найти полный путь

which mysql

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

1 2 * * * PATH=/usr/local/bin:$PATH scriptname
3
Cyrus 14 Фев 2018 в 21:45