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

ОБНОВЛЕНИЕ: обратите внимание, что приведенный ниже ответ относится к RHEL 6. В RHEL 7 большинством контрольных групп управляет systemd, а libcgroup устарела.


С момента публикации этого вопроса я изучил все руководство, на которое я ссылался выше, а также большую часть документации cgroups.txt и cpusets.txt . Теперь я знаю больше, чем когда-либо ожидал узнать о контрольных группах, поэтому я отвечу на свой вопрос здесь.

Есть несколько подходов, которые вы можете использовать. Представитель нашей компании в Red Hat (технический архитектор) рекомендовал отказаться от общего ограничения всех процессов в пользу более декларативного подхода, ограничивая только те процессы, которые мы специально хотели ограничить. Причина этого, согласно его заявлениям по этому поводу, заключается в том, что системные вызовы могут зависеть от кода пользовательского пространства (например, процессов LVM), который в случае ограничения может замедлить работу системы - противоположный ожидаемому эффект. В итоге я ограничил несколько процессов с конкретными именами и оставил все остальное в покое.

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


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

Я обнаружил, что инструменты libcgroup также могут вводить в заблуждение, потому что пакет libcgroup построен на его собственном наборе абстракций и предположений об использовании cgroups, которые немного отличаются от реальной реализации уровня ядра. групп. (Я могу привести примеры, но это потребует некоторой работы; прокомментируйте, если вам интересно.)

Поэтому перед использованием инструментов libcgroup (таких как /etc/cgconfig.conf , / etc /cgrules.conf, cgexec , cgcreate , cgclassify и т. д.) Я настоятельно рекомендую хорошо ознакомиться с / cgroup собственно виртуальная файловая система, а также создание вручную cgroups, иерархий cgroup (включая иерархии с несколькими подключенными подсистемами, которые libcgroup незаметно абстрагируется), переназначение процессов другим cgroup путем выполнения echo $ the_pid> / cgroup / some_cgroup_hierarchy / a_cgroup_within_that_hierarchy / tasks и другие, казалось бы, волшебные задачи, которые libcgroup выполняет под капотом.


Еще одна основная концепция, которую мне не хватало, заключалась в том, что если виртуальная файловая система / cgroup вообще смонтирована в вашей системе (или, точнее, если какая-либо из подсистем cgroup, также известная как «контроллеры», смонтирована вообще) , то каждый процесс во всей вашей системе находится в контрольной группе. Не существует такой вещи, как «некоторые процессы находятся в cgroup, а некоторые нет».

Существует так называемая корневая контрольная группа для данной иерархии, которая владеет всеми ресурсами системы для подключенных подсистем. Например, иерархия cgroup, к которой подключены подсистемы cpuset и blkio, будет иметь корневую cgroup, которая будет владеть всеми процессорами в системе и всеми blkio в системе, и может совместно использовать некоторые из этих ресурсов с дочерние контрольные группы. Вы не можете ограничить корневую контрольную группу, потому что она владеет всеми ресурсами вашей системы, поэтому ее ограничение даже не имеет смысла.


Некоторые другие простые данные, которые мне не хватало о libcgroup:

Если вы используете /etc/cgconfig.conf , вы должны убедиться, что chkconfig --list cgconfig показывает, что cgconfig настроен на запуск при загрузке системы.

Если вы измените /etc/cgconfig.conf , вам необходимо запустить service cgconfig restart , чтобы загрузить изменения. (И проблемы с остановкой службы или запуском cgclear очень распространены, когда вы обманываете тестирование. Для отладки я рекомендую, например, lsof / cgroup / cpuset , если cpuset - это имя иерархии контрольных групп, которую вы используете.)

Если вы хотите использовать /etc/cgrules.conf , вам необходимо убедиться, что "демон механизма правил cgroup" ( cgrulesengd ) работает: service cgred start и chkconfig cgred на .(И вы должны знать о возможном, но маловероятном состоянии гонки в отношении этой службы, как описано в Руководстве по управлению ресурсами Red Hat в разделе 2.8.1 внизу страницы.)

Если вы хотите обмануть вручную и настроить свои контрольные группы с помощью виртуальной файловой системы (которую я рекомендую для первого использования), вы можете сделать это, а затем создать файл cgconfig.conf для зеркалирования вашей установки, используя cgsnapshot с его различными параметрами.


И, наконец,ключевая информация, которую мне не хватало, когда я писал следующее:

Однако предостережение по этому поводу, похоже ... что потомки myprocessname будут переназначены в ограниченную cpu0only cgroup.

Я был прав, но есть вариант, о котором я не знал.

cgexec - это команда для запуска процесса / выполнения команды и назначения ее контрольной группе.

cgclassify - это команда для назначения уже запущенного процесса контрольной группе.

Оба они также не позволят cgred ( cgrulesengd ) переназначить указанный процесс другой контрольной группе на основе /etc/cgrules.conf .

Оба cgexec и cgclassify поддерживают флаг - sticky , который дополнительно предотвращает переназначение cgred дочерние процессы на основе /etc/cgrules.conf .


Итак, ответ на вопрос в том виде, в каком я его написал (хотя это и не та установка, которую я в итоге реализовал, из-за совета нашего Технического архитектора Red Hat, упомянутого выше):

Сделайте cpu0only и anycpu cgroup, как описано в моем вопросе. (Убедитесь, что cgconfig настроен на запуск при загрузке.)

Сделайте правило * cpuset cpu0only , как описано в моем вопросе. (И убедитесь, что cgred настроен на запуск при загрузке.)

Запустите любые процессы, которые я хочу неограниченно , с помощью: cgexec -g cpuset: anycpu --sticky myprocessname .

Эти процессы будут неограниченными, как и все их дочерние процессы. Все остальное в системе будет ограничено ЦП 0 (после перезагрузки, поскольку cgred не применяет cgrules к уже запущенным процессам, если они не изменят свой EUID). Это не совсем рекомендуется, но именно это я изначально просил, и это можно сделать с помощью контрольных групп.

1
16.12.2018, 13:58
2 ответа

Я думаю, есть два момента.

  • Расширение псевдонима работает только с первым словом, но не с опцией.
  • Вам необходимо изменить имена, предоставленные find.

Хотя все можно сделать в командной строке find, думаю, проще создать для этой цели скрипт, назовем егоocrmypdf.sh:

#!/bin/bash

languages='eng+rus+vie+...'
base="${1%.*}
ocrmypdf -l "$languages" --deskew --clean --force-ocr --sidecar "$base.txt" "$1" "$base.pdf --verbose 1

Затем вы можете запустить его с помощью

find. \( -name '*.pdf' -o -name '*.jpg' -o -name '*.tiff' -o -name '*.jpeg' -o -name '*.tif' -o -name '*.png' \) | parallel --tag -j 2 ocrmypdf.sh '{}'
1
27.01.2020, 23:42

Итак, под руководством пользователя -ralfiedl следующее работает с новейшим Tessearct 4.0 на основе LSTM на MacOSX.

Обновлено :Смог разобраться, как все это запихнуть в.profile или. bashrc именно там, где я хотел этого в первую очередь... следующему не нужны переменные для txt-файла.

function do_ocr () {
    #find. -name '*.pdf' -o -name '*.jpg' -o -name '*.tif' -o -name '*.png' -o -name '*.jpeg' -o -name '*.tiff'
    find_all_formats | parallel --tag -j 2 \
    ocrmypdf -l ori+por+srp+hin+chi_sim+spa+uzb_cyrl+mar+swa+ces+urd+nep+cat+mya+lit+dan+mlt+enm+bod+tir+tgl+tha+fas+hrv+ukr+lao+ben+eus+eng+dzo+nld+vie+ita+kir+pus+msa+heb+slv+kaz+rus+eng+vie+ukr+spa \
    --clean --deskew --rotate-pages --image-dpi 300 --jpeg-quality 75 --png-quality 75 \
    -i -f -O 2 --sidecar - --force-ocr '{}' '{}' --verbose 1

}

Примечание. :Вам необходимо вручную пересобрать каждый обучающий набор для версии 4.0, который в процессе установки Tessearact 4.0-Ссылка Github на инструкции по установке обученных данных 4.0

Обновление :Существует файл докера Tesseract 4.0, в который необходимо добавить языковые данные и шаг MacOSX -на -пошаговые инструкции по установке -, которые убедитесь, что у вас есть Java 8 co -установлен и находится в вашей среде для ScrollViewer.jar. Если вы получили это, то вышеуказанная функция позволяет вам использовать все языки «автоматически -определить», а затем, если возможно, изображения OCR, преобразовать в PDF и создать сопроводительный txt-файл содержимого (на исходном языке ).

Моя следующая попытка будет заключаться в том, чтобы сделать что-то, что берет языковые документы Office и переводит их, а также использует машинное обучение, добавляя больше данных в текстовые файлы и распознавая изображения.

0
27.01.2020, 23:42

Теги

Похожие вопросы