1)Имена файлов на русском языке 2) ошибка в cron

1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -
Количество ответов: 14

Здравствуйте,

1) до обновления moodle успешно использовал файлы с именами на русском языке, а после обновления до последней версии эти файлы (doc, docx, ppt, swf) просто перестали открываться и появляется ошибка "Извините, не удалось найти запрашиваемый Вами файл", наверняка есть настройка, которая поможет... Сервер на IIS, php 7.2.6 Даже файлы, которые только что закачиваю с именами на русском языке, не открываются


2) И такой вопрос, в уведомлениях постоянно пишется что "Скрипт обслуживания cli/cron.php не запускался уже более 24 часов.", хотя в планировщике показано что это происходит каждые 5 минут, и постоянно сохраняются логи, только в них ничего не понятно, какие-то кракозябры... что не так? куда копать?


Всех с наступающим "новым годом" (учебным) )))

В ответ на Павел Иванов

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle
в них ничего не понятно, какие-то кракозябры... что не так? куда копать?

Найти утилиту, которая умеет перекодировать из одной кодировки в другую.

Венда - это  русский в cp1251, а moodle/php это utf8.

Тот же самый far умеет  показывать текст в разных кодировках...

В ответ на Виталий Лавров

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -

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

И всё же, что может быть с русскими именами файлов? Катастрофа прям какая-то, там их много-много за пару лет накопилось, что делать??

В ответ на Павел Иванов

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -

Первую проблему с файлами решил, оказывается надо было убрать галочку Использовать «slash arguments»


Вторая актуальна, хотя cron запускается каждые 5 минут...


В ответ на Павел Иванов

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Evgeniy Schuetz -

По мне - так самый простой способ убедиться в запуске cron, так это руками запустить его из строки браузера. Если после запуска в окне браузера будет на пол-странички диагностических сообщений и общее время выполнения крона - сотые доли секунды, то да - крон периодически запускается. А если ситуация - диагностики на несколько экранов и время выполнения в секундах, то надо искать ошибки автоматического запуска.

В ответ на Evgeniy Schuetz

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -

Запуск в ручном режиме показал 1200 строк... Что это значит?

А файл логов на сервере составил аж 300 Мб. В планировщике запуск происходит регулярно, какая-то непонятная магия...


Всё началось после обновления на 3.5, что это может быть?

В логах, которые после запуска в ручную, какие-то подозрительные строки, помогите, пожалуйста, разобраться:

Scheduled task failed: Создание недостающих контекстов (core\task\create_contexts_task),Ошибка записи в базу данных
Debug info:
Table 'moodle.mdl_context_temp' doesn't exist
DELETE FROM mdl_context_temp
[array (
)]
Backtrace:
* line 1654 of \lib\dml\mysqli_native_moodle_database.php: call to moodle_database->query_end()
* line 1924 of \lib\dml\moodle_database.php: call to mysqli_native_moodle_database->delete_records_select()
* line 6892 of \lib\accesslib.php: call to moodle_database->delete_records()
* line 5644 of \lib\accesslib.php: call to context_module::build_paths()
* line 46 of \lib\classes\task\create_contexts_task.php: call to context_helper::create_instances()
* line 105 of \lib\cronlib.php: call to core\task\create_contexts_task->execute()
* line 67 of \lib\cronlib.php: call to cron_run_inner_scheduled_task()
* line 81 of \admin\cron.php: call to cron_run()

В ответ на Павел Иванов

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Vadim Tabunshchik -
Изображение пользователя Developers
В логах, которые после запуска в ручную, какие-то подозрительные строки, помогите, пожалуйста, разобраться

А что тут разбираться? Пишет же понятным языком: отсутствует таблица mdl_context_temp (Table 'moodle.mdl_context_temp' doesn't exist)

Вы с какой версии обновлялись? Подозреваю, что эта ошибка была давно, просто вы с ней только сейчас столкнулись. Так как таблица mdl_context_temp должна присутствовать ещё с версий Мудл 1.9 и раньше. Смотрите файл install.xml  в каталоге Мудл /lib/db

Я уже неоднократно писал, что перед обновлением Мудл нужно обязательно проверять схему базы данных. Можно это сделать и после обновления, если оно прошло удачно.

Документация тут: https://docs.moodle.org/35/en/Verify_Database_Schema

Я использую Navicat MySQL для сравнения баз данных.

В ответ на Vadim Tabunshchik

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -
А можно как-то через phpmyadmin просто добавить эту таблицу? В документации я ничего не понимаю, боюсь испортить БД...
В ответ на Павел Иванов

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Vadim Tabunshchik -
Изображение пользователя Developers

Какой сервер БД? MySQL? MariaDB? MSSQL? Версия Мудл?

SQL-запрос для MySQL с нужной кодировкой и т. п.:

CREATE TABLE `mdl_context_temp`  (
  `id` bigint(10) NOT NULL,
  `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `depth` tinyint(2) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Used by build_context_path() in upgrade and cron to keep context depths and paths in sync.' ROW_FORMAT = Compressed;

В ответ на Vadim Tabunshchik

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -

Да, MySQL. А moodle 3.5.1+, хотел сказать последняя, а зашёл в админку, там уже свежее появилась, обновляться или нет)

Из документации понял, что сначала надо сделать копию базы, а потом что-то сделать, чтобы удалились лишние таблицы с помощью файла install.xml и добавились недостающие.

В ответ на Vadim Tabunshchik

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -

Ошибка

SQL запрос:

CREATE TABLE `mdl_context_temp`(
    `id` BIGINT(10) NOT NULL,
    `path` VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
    `depth` TINYINT(2) NOT NULL,
    PRIMARY KEY(`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = 'Used by build_context_path() in upgrade and cron to keep context depths and paths in sync.' ROW_FORMAT = COMPRESSED

Ответ MySQL: Документация

#1813 - Tablespace for table '`moodle`.`mdl_context_temp`' exists. Please DISCARD the tablespace before IMPORT.

Вручную создать не удалосьгрущу

А может есть документация на русском с этой страницы https://docs.moodle.org/35/en/Verify_Database_Schema ? В поиске найти ничего подобного не могу.
Или может вкратце расскажете как это сделать? А то там видимо столько всего уже поменялось, я же действительно эту базу никогда так не сравнивал...
В ответ на Павел Иванов

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Vadim Tabunshchik -
Изображение пользователя Developers

Tablespace for table '`moodle`.`mdl_context_temp`' exists. - файлы таблицы существуют в каталоге БД Мудл. Но в phpmyadmin вы таблицу не увидите - она «битая».

Please DISCARD the tablespace before IMPORT. - удалите руками файлы этой таблицы (mdl_context_temp.frm и mdl_context_temp.ibd) в каталоге базы данных Мудл (mysql/data/moodle)

Потом создайте новую таблицу.

В ответ на Vadim Tabunshchik

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -

Спасибо Вам большое!

А чтобы проверить все таблицы, это в двух словах не объяснить наверное?)

В ответ на Павел Иванов

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Vadim Tabunshchik -
Изображение пользователя Developers
А чтобы проверить все таблицы, это в двух словах не объяснить наверное?)

Курите в Тырнете мануалы на предмет mysqlcheck

В простейшем виде на локальной установке Мудл базу можно проверить командой в консоли:

mysqlcheck -u root --auto-repair --databases moodle

Для начала, естественно, нужно прейти в каталог bin установки mysql

Вывод:

moodle352122

Все таблицы должны быть ОК. Опция  --auto-repair попытается восстановить поврежденные таблицы. В случае неудачи это будет уже другая история улыбаюсь

ЗЫ: в случае ошибки #1813 - Tablespace for table '`moodle`.`mdl_context_temp`' exists. Please DISCARD the tablespace before IMPORT. удалять файлы .frm и .ibd можно только в том случае, если вы уверены, что таблицы не содержат данных или эти данные вам не нужны. Иначе можете потерять важные данные. Например, mdl_course удалять нельзя, mdl_user - тоже. Поэтому обязательно нужно делать резервные копии БД. И по расписанию, и вручную перед какими-то работами на сервере.

В ответ на Vadim Tabunshchik

Re: 1)Имена файлов на русском языке 2) ошибка в cron

от Павел Иванов -

Спасибо большое за помощь! Оказывается совсем в другом месте была ошибка, на сервере в батнике, исправил и больше таких ошибок не возникало, видимо таблица как-то рабочим cron-ом исправилась) волшебство какое-то, но проверить в ручную руки чешутся) до каникул думаю дотерплю...