Encontré este fragmento de código en /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Está descargando y volviendo a cargar el firewall.
No entiendo la >> /dev/null 2>&1
parte.
¿Cuál es el propósito de tener esto en el cron? Está anulando mis reglas de firewall. ¿Puedo eliminar con seguridad este trabajo cron?
shell
syntax
posix
io-redirection
descansando
fuente
fuente
>&- 2>&-
.2>&1 > /dev/null
lo mismo que> /dev/null 2>&1
? Me parece más natural .../dev/null
emitirá la stdout original a -stderr. Pruebe la herramienta en gist.github.com/zigg/344361751c0110419b0fRespuestas:
>> /dev/null
redirige la salida estándar (stdout
) a/dev/null
, que la descarta.(
>>
Parece algo superfluo, ya que>>
significa agregar mientras que>
significa truncar y escribir, y agregar o escribir/dev/null
tiene el mismo efecto neto. Por lo general, solo lo uso>
por esa razón).2>&1
redirige el error estándar (2
) a la salida estándar (1
), que luego lo descarta también ya que la salida estándar ya se ha redirigido.fuente
&
símbolo allí2>&1
?When redirecting data streams, & means whatever follows is a file descriptor, not a filename.
Dividamos la
>> /dev/null 2>&1
declaración en partes:Parte 1:
>>
redirección de salidaEsto se utiliza para redirigir la salida del programa y agregar la salida al final del archivo. Más...
Parte 2:
/dev/null
archivo especialEste es un archivo especial de pseudodispositivos .
El comando
ls -l /dev/null
te dará detalles de este archivo:¿Lo observaste
crw
? Lo que significa que es un archivo de pseudodispositivo que es de tipo de archivo de caracteres especiales que proporciona acceso en serie.Parte 3:
2>&1
descriptor de archivoCada vez que ejecuta un programa, el sistema operativo siempre abre tres archivos, entrada estándar, salida estándar y error estándar, ya que sabemos que cada vez que se abre un archivo, el sistema operativo (desde el núcleo ) devuelve un entero no negativo llamado descriptor de archivo . El descriptor de archivo para estos archivos es 0, 1 y 2, respectivamente.
Entonces
2>&1
simplemente dice redirigir el error estándar a la salida estándar.En resumen, al usar este comando le está diciendo a su programa que no grite mientras se ejecuta.
¿Cuál es la importancia de usar
2>&1
?Si no desea producir ninguna salida, incluso en caso de algún error producido en el terminal. Para explicar más claramente, consideremos el siguiente ejemplo:
Para el comando anterior, no se imprimió ninguna salida en el terminal, pero qué pasa si este comando produce un error:
A pesar de que estoy redirigiendo la salida
/dev/null
, se imprime en el terminal. Es porque no estamos redirigiendo la salida de error/dev/null
, por lo que para redirigir también la salida de error, es necesario agregar2>&1
:fuente
>
es un operador de redirección, lo que sigue al operador de redirección se espera que sea una ubicación de archivo que se agrega&
antes1
indica que no es un archivo donde la aplicación debe redirigir la salida, pero Un descriptor de archivo. Apreciaré si alguien puede agregar más detalles de este comentario.Esta es la forma de ejecutar un programa en silencio y ocultar toda su salida.
/dev/null
es un objeto de sistema de archivos especial que descarta todo lo escrito en él. Redirigir una transmisión a ella significa ocultar la salida de su programa.La
2>&1
parte significa "redirigir la secuencia de error a la secuencia de salida", por lo que cuando redirige la secuencia de salida, la secuencia de error también se redirige. Incluso si su programa escribestderr
ahora, esa salida también se descartaría.fuente
2>&1
realidad , en realidad redirigestderr
astdout
. La diferencia entre esto y lo que reclamó se ilustra mejor intercambiando el orden de las redirecciones, por ejemplo2>&1 >/dev/null
./dev/null
es un archivo estándar que descarta todo lo que escribe, pero informa que la operación de escritura se realizó correctamente.1
es salida estándar y2
es error estándar.2>&1
redirige el error estándar a la salida estándar.&1
indica el descriptor de archivo (salida estándar), de lo contrario (si usa solo1
) redirigirá el error estándar a un archivo llamado1
.[any command] >>/dev/null 2>&1
redirige todos los errores estándar a la salida estándar y escribe todo eso en/dev/null
.fuente
Lo uso
>> /dev/null 2>&1
para un cronjob silencioso. Un cronjob hará el trabajo, pero no enviará un informe a mi correo electrónico.Que yo sepa, no lo quite
/dev/null
. Es útil, especialmente cuando ejecuta cPanel , se puede usar para informes de trabajo temporal desechables.fuente
Según lo descrito por los demás, escribir en / dev / null elimina la salida de un programa. Por lo general, cron envía un correo electrónico para cada salida del proceso iniciado con un cronjob. Entonces, al escribir la salida en / dev / null, evita que se envíe correo no deseado si ha especificado su dirección en cron.
fuente
Editar
/etc/conf.apf
. ConjuntoDEVEL_MODE="0"
.DEVEL_MODE
configurado en1
agregará un trabajo cron para detener apf después de 5 minutos.fuente