Executando o Solr com o SystemD: limitações do usuário (ulimit) aplicadas em tempo de execução diferentes das limitações configuradas

0

Estou tentando executar o solr como um serviço SystemD. Quando eu inicio o serviço, recebo este aviso, então o servidor solr pára.

jun 22 16:20:07 solr_start[1488]: *** [WARN] ***  Your Max Processes Limit is currently 14972.
jun 22 16:20:07 solr_start[1488]: It should be set to 65000 to avoid operational disruption.
jun 22 16:20:07 solr_start[1488]: If you no longer wish to see this warning, set SOLR_ULIMIT_CHECKS to false in your profile or solr.in.sh
jun 22 16:20:09 solr_start[1488]: Warning: Available entropy is low. As a result, use of the UUIDField, SSL, or any other features that require
jun 22 16:20:09 solr_start[1488]: RNG might not work properly. To check for the amount of available entropy, use 'cat /proc/sys/kernel/random/entropy_avail'.
jun 22 16:20:14 solr_start[1488]: [146B blob data]
jun 22 16:20:14 solr_start[1488]: Started Solr server on port 8983 (pid=1579). Happy searching!
jun 22 16:20:15 solr_stop[1680]: Sending stop command to Solr running on port 8983 ... waiting up to 180 seconds to allow Jetty process 1579 to stop gracefully.

Eu verifiquei o código no link . Eu posso ver que solr faz um teste em ulimit -u e ulimit -n.

O mais estranho é que eu me certifiquei de que o SystemD rodaria o servidor solr com o usuário "solr".

[Unit]
Description=Apache SOLR
After=syslog.target network.target remote-fs.target nss-lookup.target systemd-journald-dev-log.socket
Before=multi-user.target
[Service]
User=solr
#PIDFile=/mnt/solrdata/solr-8983.pid
Environment=SOLR_INCLUDE=/opt/solr/bin/solr.in.sh
ExecStart=/opt/solr/bin/solr_start
ExecStop=/opt/solr/bin/solr_stop
#Restart=on-failure
[Install]
WantedBy=multi-user.target​

E esse usuário "solr" (que configurei especialmente para executar o servidor Solr) pode criar um número ilimitado de processos e abrir um número ilimitado de arquivos.

[solr@xxx ~]# ulimit -n
unlimited
[root@xxx ~]# ulimit -u
unlimited

Quando o SystemD inicia o solr, vejo que ele usa o usuário correto (o usuário "solr" que eu configurei). Ainda vejo o erro acima.

Quando executo o solr diretamente com o usuário "solr" (não com o SystemD), ele funciona.

Por que as limitações do usuário são aplicadas em tempo de execução quando eu executo o servidor Solr eu mesmo, diferente das usadas quando executado pelo SystemD ???

    
por otonglet 25.06.2018 / 21:29

1 resposta

1

A maneira correta de configurar limites para serviços é fazê-lo dentro do arquivo .service unit. Use os parâmetros LimitNOFILE= e similares.

[Service]
LimitNOFILE=infinity
LimitNPROC=infinity

"Contas de usuário" são um conceito um pouco difuso no Linux. O processo de login interativo completo consiste em várias etapas independentes - definindo variáveis de ambiente, abrindo uma sessão do PAM, alterando o UID / GID, iniciando um shell no modo de login e executando o / etc / profile ...

A maioria dessas etapas não se aplica a serviços. Iniciar um serviço não constitui um "login" no Linux, por exemplo, PAM é não chamado. Quando você especifica um parâmetro User = na configuração do serviço (seja em systemd ou na configuração do próprio daemon), ele faz apenas uma coisa: alterar o UID / GID para o que você especificou.

Isso significa que quaisquer limites de /etc/security/limits.conf não serão aplicados (porque isso exigiria o PAM), e todos os comandos de /etc/profile não serão executados (isso exigiria um shell).

    
por 26.06.2018 / 08:54

Tags