[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: Changing who gets email from cron entries?



Time for a script maybe? Here's one which may be of use.

mailwrap.pl:



#!/bin/sh

#################################################################################
# This script does the following:
#
# - Executes a command in a subshell (command passed as first argument).
# - Captures the stdout/stderr of the command.
# - Mail the result with the subject passed as second argument with 'OK'
#   appended if the returnvalue was 0, with 'PROBLEM: RETURNVALUE X' appended
#   if the returnvalue was not 0 but X
#
# The intended mail recipient is given as third argument
#
# This script is 'silent' so that it can be started from crontab without needing
# to redirect stdout and stderr to /dev/null; any errors in the script itself
# can thus be seen if cron mails them
#
# So, to summarize, pass the following arguments:
#
# 1) Command to execute in a subshell
# 2) Subject to use in an outgoing mail (OK or PROBLEM will be prepended)
# 3) Recipient of the mail as third argument
# 4) If you do NOT want to send messages if the returnvalue is 0, i.e. if
#    you want to suppress the OK messages, pass NOOK as 4th or 5th argument
# 5) If you do not want to have empty messages on OKs, pass NOEMPTYOK as
#    4th or 5th arg
#################################################################################
# $Id: mailwrap.sh,v 1.5 2004/10/22 10:32:53 root Exp $
#################################################################################

if [[ -z "$1" ]]
then
 printf "You have to pass the command to execute as first argument!\n" >&2
 exit 1
fi

COMMAND=$1

if [[ -z "$2" ]]
then
 printf "You have to pass the subject to use as second argument!\n" >&2
 exit 1
fi

SUBJECT=$2

if [[ -z "$3" ]]
then
 printf "You have to pass the recipient to use as third argument!\n" >&2
 exit 1
fi

RECIPIENT=$3

if [[ "NOOK" == "$4" || "NOOK" == "$5" ]]
then
 # printf "NOOK passed as fourth argument - will suppress OK message\n" >&2
 NOOK=1
else
 NOOK=0
fi

if [[ "NOEMPTYOK" == "$4" || "NOEMPTYOK" == "$5" ]]
then
 # printf "NOEMPTYOK passed as fourth argument - will suppress empty OK message\n" >&2
 NOEMPTYOK=1
else
 NOEMPTYOK=0
fi

#
# Execute the passed command in a subshell. Note that /var/log/tmp must be accessible
# We use the process number to get somewhat unique filename. The /var/log/tmp
# directory should really not be writeable by anyone other than root. This should be
# checked here...
#

TMPFILE=/var/log/tmp/result.$$
$1 > $TMPFILE 2>&1
RESULT=$?

# Tweak the subject depending on $? (return value of last foreground pipeline)

if [[ $RESULT -eq 0 ]]
then
 SUBJECT="$SUBJECT: OK"
else
 SUBJECT="$SUBJECT: PROBLEM, returnvalue=$RESULT"
fi

# If NOEMPTY and the result is OK do not send anything

if [[ ($RESULT -eq 0) && ($NOEMPTYOK -eq 1) && !(-s $TMPFILE) ]]
then
 rm $TMPFILE
 exit 0
else
 # Mail results
 if [[ ! (($RESULT -eq 0) && ($NOOK -eq 1)) ]]
 then
   mail "$RECIPIENT" -s "$SUBJECT" < $TMPFILE
 # else
   # printf "Did not mail anything\n"
 fi
 # Delete the TMPFILE
 rm $TMPFILE
 # Pass the returncode of the called command to the caller
 exit $RESULT
fi




--On Tuesday, October 18, 2005 9:38 AM -0400 Bill Tangren <bjt aa usno navy mil> wrote:

However, I'd like to be able to control which cron jobs email where. For
example, lets say I want script1 to send e-mail to bob company com and
logwatch to email security company com



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]