ulimit PICKLE: «Opération non autorisée» et «Commande introuvable»


15

J'essaie d'augmenter le nombre maximum de fichiers ouverts pour l'utilisateur actuel

> ulimit -n
1024

J'essaie d'augmenter et d'échouer comme suit

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

Je fais donc la chose naturelle et j'essaie de courir avec la permission temporaire, mais échoue

> sudo ulimit -n 4096
sudo: ulimit: command not found

Des questions

  1. Comment augmenter ulimit?
  2. Pourquoi cela arrive-t-il?

Utilisation de Fedora 14


Réponse au commentaire supprimé: ulimit 4096ne fonctionne pas. Je pense que -nc'est correct. Comme preuve de concept, cela fonctionne si je le fais d'abord sudo su - root(mais ne change que pour la racine).
paislee


Réponses:


17

ulimitest un shell intégré, pas une commande externe. Il doit être intégré car il agit sur le processus shell lui-même, comme cd: les limites, comme le répertoire courant, sont une propriété de ce processus particulier.

sudo bash -c 'ulimit -n 4096'fonctionnerait, mais cela changerait la limite du processus bash invoqué par sudoseulement, ce qui ne vous aiderait pas.

Il existe deux valeurs pour chaque limite: la limite stricte et la limite souple. Seule la racine peut augmenter la limite stricte; n'importe qui peut abaisser la limite stricte et la limite souple peut être modifiée dans les deux sens avec la seule contrainte qu'elle ne peut pas être supérieure à la limite stricte. La limite souple est la valeur réelle qui compte.

Par conséquent, vous devez vous assurer que tous vos processus ont une limite stricte pour les fichiers ouverts d'au moins 4096. Vous pouvez conserver la limite logicielle à 1024. Avant de lancer ce processus qui nécessite beaucoup de fichiers, augmentez la limite logicielle. Dans /etc/security/limits.conf, ajoutez les lignes

paislee hard nofile 4096
paislee soft nofile 1024

paisleeest le nom de l'utilisateur sous lequel vous souhaitez exécuter votre processus. Dans le shell qui lance le processus pour lequel vous souhaitez une limite supérieure, exécutez

ulimit -Sn unlimited

pour augmenter la limite souple à la limite dure.


1
Les alternatives à sudo bash -csont sudo -iqui démarrent un shell de connexion et sudo -squi démarrent un shell. Les mêmes limitations s'appliquent mais cela peut être utile dans d'autres circonstances.
Bram

Merci. Puis-je poser des questions connexes? L'autre réponse et publication stackoverflow.com/a/17483998/156458 et unix.stackexchange.com/a/238413/674 et unix.stackexchange.com/a/169035/674 recommandent tous l'utilisation sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Mais à la fois ulimit -c 1024et exec su $LOGNAME" n'affecte que le shell créé par sudo, quel est le but de la commande? exec su $LOGNAME"également ne fait rien de significatif pour utiliser la limite modifiée. Je suis très confus et je me demande si je manque quelque chose.
Tim

Veuillez noter que ulimit -Sn unlimitedcela ne fonctionne pas sur la plupart des coques. La bonne méthode consiste à appeler ulimit -apuis à appeler ulimit -n <number>où <numéro est la limite fixe (la colonne de droite).
schily

3

ouvrez le fichier /etc/security/limits.confet ajoutez la ligne <user> soft nofile <value>. pour utiliser la ulimitmodification de l'utilisateur root et essayez la même chose.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.