LINUX.ORG.RU

ulimit не отрабатывает при запуске из сервиса systemd

 , ,


0

1

Добрый день. Имеются 2 российских дистрибутива - RedOs и Goslinux. Goslinux - близкий брат RedOs, разрабатывался той же компанией, но имеет отличие в настройках. Именно это, похоже, и является источником моей проблемы.

Есть примерно такой юнит, прекрасно работающий на RedOs:

[Unit]
Description=somesoft
After=postgresql.service

[Service]
Type=simple
User=someuser
Group=someuser
ExecStart=/opt/vendor/somesoft/system/bin/run.sh
ExecStop=/opt/vendor/somesoft/system/bin/stop.sh
ExecReload=/opt/vendor/somesoft/system/bin/restart.sh

[Install]
WantedBy=multi-user.target

Однако при попытке стартовать такой сервис на GosLinux в статусе первой строкой идёт:

/opt/vendor/somesoft/system/bin/run.sh: line 13: ulimit: open files: cannot modify limit: Операция не позволена
Программа стартует не полностью - загружается только сервер приложений Wildfly, а сами задеплоенные в нём war приложения не стартуют. Что в принципе объяснимо, видимо не хватает ресурсов из за не сработавшего ulimit.

В /etc/security/limits.conf записано:

someuser hard nofile 30000
someuser soft nofile 30000
someuser hard nproc 8192
someuser soft nproc 8192
И эти настройки срабатывают при запуске из командной строки. /opt/vendor/somesoft/system/bin/run.sh прекрасно отрабатывает, ulimit срабатывает и программа полностью запускается. А при запуске той же команды из сервиса - нет.

Буду очень благодарен за подсказку.



Последнее исправление: eol3000 (всего исправлений: 1)

limits.conf читает и применяет какой-то из Pam модулей при создании новой логин сессии. Systemd не создаёт новой логин сессии при запуске сервиса. Поэтому надо просто добавить лимит в юнит файл: LimitNOFILE=30000.

iliyap ★★★★★
()