Вчера я столкнулся с аналогичной проблемой, но моя проблема заключалась в настройке пути для журнала ошибок в файле my.cnf. Я привык использовать log-error=/var/log/mysql/mysql.err
(, который отлично работает в другой среде докера, отличной от -), но при использовании в докере я понял, что он не принимает расширение .err
. Затем я использовал расширение .log
, и оно работало нормально. Хотя я запускаю базовый образ докера mariadb:10.2
, он должен быть таким же при запуске образа mysql:5.7
. К вашему сведению :, хотя файл ошибок является журналом, на него не влияет переменная log-output=TABLE
, так как его нельзя просмотреть в таблице mysql
. Я также думаю, что регистрация в TABLE
создает ненужную нагрузку на сервер, и этого следует избегать, если это возможно.
Если ваш скрипт запускается из командной строки, а не из cron
, есть два обычных подозреваемых:
cron
отличается от вашего пути в качестве «обычного» пользователя. Вы можете решить эту проблему, используя спецификацию полного пути для вашего скрипта :@reboot python3 /full/path/to/myscript.py
cron
не знает о состоянии каких-либо служб при запуске. Для cron
@reboot
означает, когда запускается cron
, а не когда сеть работает или какие-либо другие службы, которые могут потребоваться для вашего задания cron
. Один из способов позаботиться об этом — sleep
немного перед запуском скрипта:@reboot (sleep 30; python3 /full/path/to/myscript.py)
Это задержит выполнение вашего скрипта на 30 секунд. Ничего волшебного в 30 секундах... это зависит от вашей системы. Вы можете провести несколько проб и ошибок, чтобы найти надежное время сна.
Обратите внимание, что другим подходом, позволяющим избежать недостатков cron
в отношении состояния системных служб, является использование systemd
. Некоторые (, в том числе и я, )находят cron
более простым в использовании, но, безусловно, systemd
имеет некоторые преимущества.
Наконец, обычно рекомендуется собирать все сообщения об ошибках, сгенерированные при запуске скрипта. Еще одно дополнение к единственной строке в вашем crontab
сделает это:
@reboot (sleep 30; python3 /full/path/to/myscript.py >> /home/yours/cronjoblog) 2>&1
Любые сообщения об ошибках из stderr
будут добавляться к указанному вами файлу.