Por que o ulimit -n não funciona quando chamado dentro de um script?

2

Isso é muito estranho. Estou tentando definir o ulimit para 60000 via meu startup.sh :

#!/bin/bash

ulimit -n 60000
echo "Hello! File Descriptor set"

Eu posso executar isso com ./startup.sh (755 permissões de arquivo) e a linha de eco é impressa, e nenhum erro é mostrado. No entanto, quando eu faço ulimit -n ele ainda mostra 1024 , o que está acontecendo?

O que eu também acho fascinante é que eu posso digitar ulimit -n 60000 no terminal, e então fazer ulimit -n e isso funciona perfeitamente. Por que não posso definir o limite do descritor de arquivo por meio de um script?

Debian 8, 64 bits. Contêiner OpenVZ

    
por John Miller 26.01.2018 / 21:48

2 respostas

0

Isso é simplesmente porque o limite foi definido dentro do script de shell, isto é, o shell ( bash neste caso) gerou executando o script (o kernel na verdade coloca o script como um argumento para o shell).

Assim, quando a execução do script estiver concluída, o shell desaparecerá (e o limite) também. E você está de volta ao seu escudo original.

Para testar, execute o ulimit -n dentro do script.

    
por 26.01.2018 / 22:08
0

Os processos só podem definir limites para eles e seus filhos; o que você está tentando definir com ulimit -n é um limite global, não um por processo. Para definir limites globais como você deseja, você pode criar um script Python usando setrlimit() e resource.RLIMIT_NOFILE do Módulo resource .

    
por 26.01.2018 / 22:11