Implemented commandline params, updated README.md, added cpanfile, fixed couple of bugs

- Use Proc::Find instead of ps utility
- Use builtin kill instead of commandline utility
- Use setpriority instead of renice utility
- Implemented config parameter loopdelay
- Implemented config parameter cmddelay
- Implemented commandline parameter --config
- Added --help parameter
- Implemented commandline parameter --pidfile
- Added cpanfile and bootstrap.sh to bootstrap this daemon
- Optimized algo - do not send signals to already "signaled" processes, do not ionice already ioniced pids
This commit is contained in:
eleksir
2023-05-01 16:33:27 +03:00
parent 4229e2f914
commit 3082dd2add
5 changed files with 217 additions and 91 deletions

View File

@@ -10,33 +10,59 @@
## Как это установить и заставить работать?
Для установки нам понадобятся пакеты с перлом и перловым модулем JSON::XS из текущего дистрибутива линукса, например, их
можно уставить командами:
### Установка reniced
Для вуишфт-образных дистрибутивов
Для установки и работы нам понадобятся модули, которые скорее всего с дистрибутивом не идут. Чтобы их установить нам
понадобятся собственно perl и его пакетный менеджер cpanm.
Для debian-образных дистрибутивов эти пакеты можно установить командами:
```bash
apt-get install perl perl-json-xs
dnf install perl perl-App-cpanminus
```
Для наследников redhat-а
Для rhel-образых - командами:
```bash
dnf install perl perl-json-xs
apt install perl cpanminus
```
Для всех остальных нужен будет perl, cpanm и переменная окружения PERL5LIB. За подробностями - добро пожаловать в гугл.
И далее приложение надо будет "забутстрапить". С этим есть небольшая тонкость - если у вас определена переменная
PERL5LIBS, то при запуске модули будут браться из системы и каталогов, обозначенных в ней, если не определена, то только
из системы. Соответственно, предполагается, что у нас запуск команды reniced будет в окружении, в котором есть всё
необходимое (в cpanfile есть список всех нужных для работы библиотек), либо в системе, где все нужные либы уже
установлены штатным пакетным менеджером.
Как заставить это работать?
Бутстрапится приложение командой
Вначале надо скопировать конфиг из **config_example.json** в **~/.reniced.json** и далее подправить все необходимые
значения в нём.
```
bash bootstrap.sh
```
При этом все либы складываются в ~/perl5. У рута это будет /root/perl5, у обычного пользователя - ${HOME}/perl5. (при
этом $HOME обычно это /home/имя_пользователя). В случае MacOS пути будут иные: /var/root/perl5 для рута и ${HOME}/perl5
(при этом $HOME обычно это /Users/имя_пользователя). Собственно, тот каталог с либами далее можно переместить куда надо.
### Работа с reniced
Вначале надо скопировать конфиг из **example_config.json** в **~/.reniced.json**, если запуск планируется от
пользователя (что не рекомендуется см. Caveats ниже), либо скопировать конфиг из **example_config.json** в
**/etc/reniced.json**, если запуск будет от суперпользователя (рута, uid=0) и далее подправить все необходимые значения
в нём.
После настройки списка процессов и приоритетов их работы, можно запускать сервис как unix daemon или как обычный
процесс. Второй вариант нужен для запуска сервиса через systemd.
Если reniced планируется запускать от рута (uid=0), то конфиг будет находиться не в **~/.reniced.json**, а в
**/etc/reniced.json**.
#### Аргументы командной строки
**--help** - краткая справка по запуску команды
**--pidfile** - указать положение pidfile, в который будет записываться process id (для рута по-умолчанию
/run/reniced.pid, для обычного пользователя по-умолчанию /tmp/reniced-UID.pid)
**--config** - указать положение файла с конфигом (для рута - /etc/reniced.json, для обычного
пользователя - ~/.reniced.json)
## Caveats
@@ -50,7 +76,8 @@ dnf install perl perl-json-xs
sudo reniced
```
в каталоге с reniced. Кроме того, под MacOS конфиг всегда ищется в ~/.reniced.json
в каталоге с reniced. Кроме того, под MacOS конфиг всегда ищется в ~/.reniced.json, а при таком запуске нужно, чтобы
была выставлена переменная окружения PERL5LIB, например в ~/.zprofile.
В линуксах такой проблемы пока нет (но возможно будет, когда придут "атомарные" обДНОвления).
@@ -68,5 +95,5 @@ sudo reniced
При запуске reniced от обычного пользователя, niceness процесса может идти только в плюс. То есть, процесс с nice=11 не
получится сделать с nice=9, например (без перезапуска процесса, конечно). Зато от суперпользователя такое работает.
## Special thans
## Special thanks
Авторам VK Teams. Без их мессенджера, с его "недостатками", не было бы этого костыля.