J'ai trouvé ce morceau de code dans /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Il rince et recharge le pare-feu.
Je ne comprends pas la partie >> /dev/null 2>&1
.
Quel est le but d'avoir cela dans le cron? Cela annule les règles de mon pare-feu. Puis-je supprimer ce travail cron en toute sécurité?
>> /dev/null
redirige la sortie standard (stdout
) vers /dev/null
, qui la rejette.
(Le >>
semble plutôt superflu, car >>
signifie ajouter tandis que >
signifie tronquer et écrire, et soit ajouter à, soit écrire sur /dev/null
a le même effet net. I généralement, utilisez simplement >
pour cette raison.)
2>&1
redirige l'erreur standard (2
) vers la sortie standard (1
), qui la supprime également car la sortie standard a déjà été redirigée.
Décomposons l'instruction >> /dev/null 2>&1
en plusieurs parties:
Partie 1: >>
redirection de sortie
Ceci est utilisé pour rediriger la sortie du programme et ajouter la sortie à la fin du fichier. Plus ...
Partie 2: /dev/null
fichier spécial
Ceci est un fichier spécial de pseudo-périphériques.
La commande ls -l /dev/null
vous donnera les détails de ce fichier:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Avez-vous observé crw
? Ce qui signifie qu'il s'agit d'un pseudo-device fichier de type character-special-file qui fournit un accès en série.
/dev/null
accepte et supprime toutes les entrées; ne produit aucune sortie (retourne toujours une indication de fin de fichier sur une lecture). Référence: Wikipedia
Partie 3: 2>&1
descripteur de fichier
Lorsque vous exécutez un programme, le système d'exploitation ouvre toujours trois fichiers STDIN
, STDOUT
et STDERR
, comme nous le savons chaque fois qu'un fichier est ouvert, système d'exploitation (à partir de kernel =) renvoie un entier non négatif appelé Descripteur de fichier. Le descripteur de fichier pour ces fichiers est respectivement 0, 1 et 2.
Donc, 2>&1
dit simplement rediriger STDERR
vers STDOUT
&
signifie que tout ce qui suit est un descripteur de fichier, pas un nom de fichier.
En bref, en utilisant cette commande, vous dites à votre programme de ne pas crier pendant l'exécution.
Quelle est l'importance d'utiliser 2>&1
?
Si vous ne voulez produire aucune sortie, même en cas d'erreur dans le terminal. Pour expliquer plus clairement, considérons l'exemple suivant:
$ ls -l > /dev/null
Pour la commande ci-dessus, aucune sortie n'a été imprimée dans le terminal, mais que se passe-t-il si cette commande génère une erreur:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
Bien que je redirige la sortie vers /dev/null
, elle est imprimée dans le terminal. C'est parce que nous ne redirigeons pas la sortie d'erreur vers /dev/null
. Par conséquent, pour rediriger également la sortie d'erreur, il est nécessaire d'ajouter 2>&1
.
$ ls -l file_doesnot_exists > /dev/null 2>&1
C'est la manière d'exécuter un programme en silence et de cacher toutes ses sorties.
/dev/null
est un objet de système de fichiers spécial qui jette tout ce qui y est écrit. Réorienter un flux vers celui-ci signifie cacher une sortie.
La partie 2>&1
signifie "redirige les flux de sortie et d'erreur". Même si votre programme écrit sur stderr
, cette sortie ne sera pas affichée.
/dev/null
- fichier standard qui ignore tout ce que vous écrivez, mais indique que l'opération d'écriture a réussi. 1
est stdout et 2
est stderr. 2>&1
redirige stderr vers stdout. &1
indique un descripteur de fichier (stdout), sinon (si vous utilisez uniquement 1
), vous redirigerez stderr vers un fichier nommé 1
. [any command] >>/dev/null 2>&1
redirige tout le stderr vers stdout et écrit tout cela dans /dev/null
.
J'utilise >> /dev/null 2>&1
pour cronjob silencieux, cronjob fera le travail mais n'enverra pas de rapport à mon adresse email.
Autant que je sache, ne retirez pas /dev/null
, c'est particulièrement utile lorsque vous utilisez cpanel, vous pouvez l'utiliser pour le rapport de jetage cronjob.
Comme décrit par les autres, écrire dans/dev/null élimine la sortie d'un programme. Généralement, cron envoie un courrier électronique pour chaque sortie du processus démarré avec un travail cron. Donc, en écrivant la sortie dans/dev/null, vous évitez d'être spammé si vous avez spécifié votre adresse dans cron.
Éditez /etc/conf.apf
. Définissez DEVEL_MODE="0"
. DEVEL_MODE
réglé sur 1
ajoutera un travail cron pour arrêter apf après 5 minutes.