Je gère une application qui écrit pour log.txt. L'application a été mise à jour vers une nouvelle version, ce qui rend les plugins pris en charge ne sont plus compatibles. Il oblige une quantité énorme d'erreurs dans log.txt et ne semble pas supporter l'écriture dans un fichier journal différent.
Comment puis-je les écrire à un journal différent?
J'ai envisagé de remplacer log.txt avec un lien dur (l'application ne peut pas dire la différence à droite?) Ou un lien dur qui pointe vers/dev/null. Quelles sont mes options?
# cp -a /dev/null log.txt
Ceci copie votre appareil NULL avec les numéros de développement majeurs et mineurs adéquats à log.txt
Vous avez donc un autre null
.
Les appareils ne sont pas connus du nom du tout dans le noyau, mais plutôt par leur nombre majeur et mineur. Puisque je ne sais pas quel système d'exploitation que vous avez, j'ai trouvé cela pratique de simplement copier les chiffres d'où nous savons déjà qu'ils sont déjà. Si vous le faites avec les mauvais chiffres majeurs et mineurs, vous auriez probablement fait un autre appareil, peut-être un disque ou autre chose que vous ne voulez pas d'écrire.
Vous pouvez créer un lien symbolique vers/dev/null et vous n'avez pas besoin d'être root:
ln -s /dev/null log.txt
Les autres réponses ici vont probablement fonctionner. En particulier, la solution Symlink va probablement être la solution la plus facile. Je propose cela principalement pour la complétude.
Les solutions impliquant mknod
(ou cp -a
) Devenez problématique Si le système de fichiers contenant le fichier ne prend pas en charge les périphériques (par exemple, il a été monté avec l'option nodev
, par exemple). Et bien sûr, les liens durs entre les systèmes de fichiers ne fonctionneront tout simplement pas.
Une alternative aux liaisons durs ou à la création de nouveaux nœuds de périphériques consiste à utiliser des supports de liaison, ce qui vous permet de monter un fichier ou un répertoire d'une partie de votre arborescence du système de fichiers sur un autre. Ainsi, par exemple, vous pouvez exécuter:
mount -o bind /dev/null /path/to/log.txt
Cela agit beaucoup comme un lien dur, mais:
Pour un exemple complet:
bash-4.3# ls -l /var/log/boot.log
-rw-r--r--. 1 root root 7436 Dec 19 10:00 /var/log/boot.log
bash-4.3# mount -o bind /dev/null /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
bash-4.3# echo words words words > /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
Eh bien, une méthode sans grave avec pipe nommée:
# create a named pipe
mkfifo /path/to/log.txt
# read contents from the pipe and redirect them to /dev/null
cat /path/to/log.txt > /dev/null
vous pouvez presque tout faire avec le journal déversé, tel que le filtre ou l'envoi de NC.
Envisagez de faire le fichier un appareil NULL réel. Un fichier "log.txt" créé avec MKNOD, avec le type de fichier bon et le même nombre mineur et majeur, agira en tant que périphérique NULL, car c'est.