Знак вопроса обычно указывает на символ, который не может быть отображен; тот факт, что он находится в конце строки, заставляет меня думать, что ваш сценарий имеет Windows окончания строки, а не Unix. Это можно исправить с помощью команды dos2unix
: dos2unix /path/to/script.sh
Также рекомендуется не разбрасывать пароли MySQL в CLI и не сохранять их в исполняемых скриптах. Вы можете выполнить sh, используя MySQL Файлы опций , в частности, файл, определяющий опции уровня пользователя (~/.my.cnf
).
Однако для этого потребуется выяснить, какой пользователь выполняет этот cronjob. Я предполагаю, что вы не сделали это определение внутри системного уровня crontab; если бы вы имели, вы бы на самом деле пытались выполнить /opt/mysqlbackup.sh > /dev/null 2>&1
как пользователь bash
. Этот пользователь, скорее всего, не существует (и не должен) существовать, поэтому cron не сможет выполнить скрипт полностью.
Поскольку это не так (вы говорите, что он выполняет mysqldump просто отлично), это делает Мне кажется, у вас есть определение в crontab уровня пользователя. Как только мы выясним, какой пользователь на самом деле является тем, о чем я просил в своем комментарии, мы можем определить проблему с правами доступа к файлу, а также создать вышеупомянутый файл параметров MySQL.