4 votes

Comment rendre permanent le changement ''sudo launchctl limit'' ?

J'ai un travail d'arrière-plan qui a échoué en raison de too many open files erreur.

Pour résoudre le problème, je dois interrompre le travail, puis exécuter la commande suivante

sudo launchctl limit maxfiles 10240 10240

avant de le redémarrer.

Existe-t-il un moyen de rendre le launchctl limit maxfiles changement permanent ?

7voto

grg Points 181593

Vous pouvez créer un démon de lancement pour exécuter cette commande à chaque démarrage. Créer /Library/LaunchDaemons/private.maxfiles.plist avec le contenu suivant :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>private.maxfiles</string>
        <key>ProgramArguments</key>
        <array>
            <string>launchctl</string>
            <string>limit</string>
            <string>maxfiles</string>
            <string>10240</string>
            <string>10240</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

1voto

Ted Wrigley Points 725

Launchd a deux clés - HardResourceLimits y SoftResourceLimits - qui peut être utilisée pour limiter les ressources des emplois. Ils prennent un dictionnaire d'entiers, de sorte que vous pouvez ajouter quelque chose comme ce qui suit à votre plist launchd pour obtenir une solution permanente :

<key>HardResourceLimits</key>
<dict>
    <key>NumberOfFiles</key>
    <integer>500</integer>
</dict>

Cela devrait limiter à 500 le nombre de fichiers ouverts par ce processus.

Je ne suis pas vraiment certain de la différence entre les limites "douces" et "dures", bien que la page de manuel de launchd.plist dise (de façon cryptique) :

Nombre de fichiers

Nombre maximal de fichiers ouverts pour ce processus. La définition de cette valeur dans un démon système définira la valeur sysctl(3) kern.maxfiles (SoftResourceLimits) ou kern.maxfilesperproc (HardResourceLimits) en plus des valeurs setrlimit(2).

sysctl(3) n'a pas de page de manuel sur ma machine, et il est trop tôt le matin pour que j'aille faire une recherche sur google. Je dirais cependant que ce que vous recherchez réellement est une erreur de codage, et que vous devriez la corriger dans le démon, sans vous fier à launchd. launchd aime avoir un contrôle flexible sur les choses, et préférerait que les utilisateurs évitent de trop dicter leur conduite.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X