Redirecting Standard Output to Supress Messages in Cron Jobs +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :Posted: 2007-06-02 17:57 :Tags: Debian Under Linux if you want to suppress messages written to the standard output stream you can redirect them to a special file called `/dev/null `_ which discards all data written to it (but reports that the write operation succeeded), and provides no data to any process that reads from it (it returns EOF). This functionality is really useful when specifying commands for cron scripts if you only want to be notified if errors occur because you can redirect standard output to ``/dev/null`` so that only messages to standard error will be reported. Let's demonstrate this. Create a file named ``output_test.py`` with the following content:: #!/usr/bin/env python import sys sys.stdout.write("From stdout\n") sys.stderr.write("From stderr\n") Run this command to change the permissions so the file can be executed:: chmod 755 output_test.py Then you can test it:: james@bose:~$ ./output_test.py From stdout From stderr As you can see the output from both standard output and standard error are displayed. Now let's try redirecting to ``/dev/null``:: james@bose:~$ ./output_test.py > /dev/null From stderr As you can see only standard error is actually displayed. We can make use of this in the example below where ``some_script.py`` is run every 4 hours and any error information is emailed to james@example.com but any standard output is ignored:: MAILTO=james@example.com 0 */4 * * * some_script.py > /dev/null With this example an email will only be sent if information is written to standard error. You might also want to redirect error output to ``/dev/null`` instead (but this would normally not be recommended - error messages are there for a reason). The way to do this depends on your shell. I'm using Bash so I can do so like this:: james@bose:~$ ./output_test.py 2> /dev/null From stdout In this example the ``2`` just before ``>`` says that the standard error should be redirected to ``/dev/null``. A ``1`` would refer to standard output and a ``0`` would refer to standard input. You can also redirect both:: james@bose:~$ ./output_test.py 1> /dev/null 2> /dev/null james@bose:~$ Learn more about `redirection `_ at the wikipedia page.