Encontrei este código em /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Está liberando e recarregando o firewall.
Eu não entendo a >> /dev/null 2>&1
parte.
Qual é o propósito de ter isso no cron? Está substituindo minhas regras de firewall. Posso remover com segurança este trabalho cron?
shell
syntax
posix
io-redirection
em repouso
fonte
fonte
>&- 2>&-
.2>&1 > /dev/null
o mesmo que> /dev/null 2>&1
? Parece mais natural para mim .../dev/null
stderr ainda será produzido. Tente a ferramenta em gist.github.com/zigg/344361751c0110419b0fRespostas:
>> /dev/null
redireciona a saída padrão (stdout
) para/dev/null
, que a descarta.(
>>
Parece meio supérfluo, já que>>
significa anexar enquanto>
significa truncar e escrever, e anexar ou gravar/dev/null
tem o mesmo efeito líquido. Normalmente, eu apenas uso>
por esse motivo.)2>&1
redireciona o erro padrão (2
) para a saída padrão (1
), que também o descarta, pois a saída padrão já foi redirecionada.fonte
&
símbolo indica lá2>&1
.When redirecting data streams, & means whatever follows is a file descriptor, not a filename.
Vamos dividir a
>> /dev/null 2>&1
declaração em partes:Parte 1:
>>
redirecionamento de saídaIsso é usado para redirecionar a saída do programa e anexá-la ao final do arquivo. Mais...
Parte 2:
/dev/null
arquivo especialEste é um arquivo especial de pseudo-dispositivos .
O comando
ls -l /dev/null
fornecerá detalhes desse arquivo:Você observou
crw
? O que significa que é um arquivo de pseudo-dispositivo que é do tipo de arquivo especial de caractere que fornece acesso serial.Parte 3:
2>&1
descritor de arquivoSempre que você executa um programa, o sistema operacional sempre abre três arquivos, entrada padrão, saída padrão e erro padrão, como sabemos sempre que um arquivo é aberto, o sistema operacional (do kernel ) retorna um número inteiro não negativo chamado descritor de arquivo . O descritor de arquivo para esses arquivos é 0, 1 e 2, respectivamente.
Então,
2>&1
simplesmente diz redirecionar o erro padrão para a saída padrão.Em resumo, usando este comando, você está dizendo ao seu programa para não gritar durante a execução.
Qual a importância de usar
2>&1
?Se você não quiser produzir nenhuma saída, mesmo no caso de algum erro produzido no terminal. Para explicar mais claramente, vamos considerar o seguinte exemplo:
Para o comando acima, nenhuma saída foi impressa no terminal, mas e se este comando produzir um erro:
Apesar de eu estar redirecionando a saída para
/dev/null
, ela é impressa no terminal. É porque não estamos redirecionando a saída de erro para/dev/null
, portanto, para redirecionar também a saída de erro, é necessário adicionar2>&1
:fonte
>
é um operador de redirecionamento, o que quer que seja que o operador de redirecionamento a seguir seja esperado para ser um local de arquivo acrescentado&
antes1
indica que não é um arquivo em que o aplicativo precisa redirecionar a saída, mas um descritor de arquivo. Agradeço se alguém puder adicionar mais detalhes deste comentário.Esta é a maneira de executar um programa silenciosamente e ocultar toda a sua saída.
/dev/null
é um objeto especial do sistema de arquivos que descarta tudo o que está escrito nele. Redirecionar um fluxo para ele significa ocultar a saída do seu programa.A
2>&1
parte significa "redirecionar o fluxo de erros para o fluxo de saída"; portanto, quando você redireciona o fluxo de saída, o fluxo de erros também é redirecionado. Mesmo que seu programa gravestderr
agora, essa saída também será descartada.fonte
2>&1
na verdade redirecionastderr
parastdout
. A diferença entre isso e o que você reivindicou é melhor ilustrada trocando a ordem dos redirecionamentos, por exemplo2>&1 >/dev/null
./dev/null
é um arquivo padrão que descarta tudo o que você escreve nele, mas informa que a operação de gravação foi bem-sucedida.1
é saída padrão e2
é erro padrão.2>&1
redireciona o erro padrão para a saída padrão.&1
indica descritor de arquivo (saída padrão); caso contrário (se você usar apenas1
), você redirecionará o erro padrão para um arquivo chamado1
.[any command] >>/dev/null 2>&1
redireciona todos os erros padrão para a saída padrão e grava tudo isso em/dev/null
.fonte
Eu uso
>> /dev/null 2>&1
para um cronjob silencioso. Um cronjob fará o trabalho, mas não enviará um relatório para o meu email.Tanto quanto eu sei, não remova
/dev/null
. É útil, especialmente quando você executa o cPanel , pode ser usado para relatórios de cronjob descartáveis.fonte
Conforme descrito pelos outros, gravar em / dev / null elimina a saída de um programa. Geralmente, o cron envia um email para todas as saídas do processo iniciadas com um cronjob. Portanto, ao escrever a saída em / dev / null, você evita o envio de spam se tiver especificado seu endereço no cron.
fonte
Edit
/etc/conf.apf
. SetDEVEL_MODE="0"
.DEVEL_MODE
defina como1
adicionará um trabalho cron para parar o apf após 5 minutos.fonte