Aujourd’hui un nouveau problème s’est posé à moi, comment limiter la taille d’un coredump afin que celui-ci ne remplisse pas tout mon filesystems?

Mes coredumps sont générés dans le filesystems /var et je souhaite limiter la taille à 80% de l’espace disponible. Il faut savoir que a taille des coredump est définit en blocs de 512 bytes et par défaut leur taille est illimité:

1
2
3
4
5
6
7
8
$ ulimit -a
time(seconds)		 unlimited
file(blocks)		 unlimited
data(kbytes)		 unlimited
stack(kbytes)		 8192
coredump(blocks)	 unlimited
nofiles(descriptors)	 65536
vmemory(kbytes)		 unlimited

On peut figer la taille des coredump avec la commande « ulimit -c XXXXX ». Il faut au préalable calculer 80% de l’espace libre de mon filesystems /var en blocs de 512 bytes. La question est donc: Comment faire tout ça en une ligne de commande?
Voici la réponse:

1
$ ulimit -c $(/usr/xpg4/bin/df -P /var | tail -1 | awk '{printf ("%d\n",$4*0.8)}')

Noter bien le chemin d’accès au binaire df car sinon le paramètre -P ne sera pas reconnu.
Pour vérifier:

1
2
3
4
5
6
7
8
$ ulimit -a
time(seconds)		 unlimited
file(blocks)		 unlimited
data(kbytes)		 unlimited
stack(kbytes)		 8192
coredump(blocks)	 6412156
nofiles(descriptors)	 65536
vmemory(kbytes)		 unlimited