I found this piece of code in /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
It's flushing and reloading the firewall.
I don't understand the >> /dev/null 2>&1
part.
What is the purpose of having this in the cron? It's overriding my firewall rules. Can I safely remove this cron job?
>> /dev/null
redirects standard output (stdout
) to/dev/null
, which discards it.(The
>>
seems sort of superfluous, since>>
means append while>
means truncate and write, and either appending to or writing to/dev/null
has the same net effect. I usually just use>
for that reason.)2>&1
redirects standard error (2
) to standard output (1
), which then discards it as well since standard output has already been redirected.I use
>> /dev/null 2>&1
for silent cronjob, cronjob will do the job but not send report to my email.As far as I know, don't remove
/dev/null
, it's useful especially when you running cpanel, can be used for throw away cronjob report.Let's break
>> /dev/null 2>&1
statement into parts:Part 1:
>>
output redirectionThis is used to redirect the program output and append the output at the end of the file. More...
Part 2:
/dev/null
special fileThis is a Pseudo-devices special file.
Command
ls -l /dev/null
will give you details of this file:Did you observe
crw
? Which means it is a pseudo-device file which is of character-special-file type that provides serial access.Part 3:
2>&1
file descriptorWhenever you execute a program, operating system always opens three files
STDIN
,STDOUT
, andSTDERR
as we know whenever a file is opened, operating system (from kernel) returns a non-negative integer called as File Descriptor. The file descriptor for these files are 0, 1, 2 respectively.So
2>&1
simply says redirectSTDERR
toSTDOUT
In short, by using this command you are telling your program not to shout while executing.
What is the importance of using
2>&1
?If you want to produce no output even in case of some error produced in the terminal. To explain more clearly, let's consider the following example:
For the above command, no output was printed in the terminal, but what if this command produces an error:
Despite I'm redirecting output to
/dev/null
, it is printed in the terminal. It is because we are not redirecting error output to/dev/null
, so in order to redirect error output as well, it is required to add2>&1
Edit
/etc/conf.apf
. SetDEVEL_MODE="0"
.DEVEL_MODE
set to1
will add a cron job to stop apf after 5 minutes./dev/null
- standard file that discards all you write to it, but reports that the write operation succeeded.1
is stdout and2
is stderr.2>&1
redirects stderr to stdout.&1
indicates file descriptor(stdout), otherwise(if you use just1
) you will redirect stderr to file named1
.[any command] >>/dev/null 2>&1
redirects all stderr to stdout, and writes all of that to/dev/null
.This is the way to execute a program quietly, and hide all its output.
/dev/null
is a special filesystem object that throws away everything written into it. Redirecting a stream into it means hiding an output.The
2>&1
part means "redirect both the output and the error streams". Even if your program writes tostderr
, that output will not be shown.