/usr/sbin/exiwhat is in exim4-base 4.82-3ubuntu2.4.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #! /bin/sh
# Copyright (c) University of Cambridge, 1995 - 2007
# See the file NOTICE for conditions of use and distribution.
# Except when they appear in comments, the following placeholders in this
# source are replaced when it is turned into a runnable script:
#
# CONFIGURE_FILE_USE_NODE
# CONFIGURE_FILE
# BIN_DIRECTORY
# EXIWHAT_PS_CMD
# EXIWHAT_PS_ARG
# EXIWHAT_KILL_SIGNAL
# EXIWHAT_EGREP_ARG
# EXIWHAT_MULTIKILL_CMD
# EXIWHAT_MULTIKILL_ARG
# This file has been so processed.
# Shell script for seeing what the exim processes are doing. It gets rid
# of the old process log, then sends SIGUSR1 to all exim processes to get
# them to write their state to the log. Then it displays the contents of
# the log.
# The following lines are generated from Exim's configuration file when
# this source is built into a script, but you can subsequently edit them
# without rebuilding things, as long are you are careful not to overwrite
# the script in the next Exim rebuild/install. However, it's best to
# arrange your build-time configuration file to get the correct values.
# Some operating systems have a command that finds processes that match
# certain conditions (by default usually those running specific commands)
# and sends them signals. If such a command is defined for your OS, the
# following variables are set and used.
multikill_cmd=killall
multikill_arg=exim4
# In other operating systems, Exim has to use "ps" and "egrep" to find the
# processes itself. In those cases, the next three variables are used:
ps_cmd=/bin/ps
ps_arg=ax
egrep_arg='/exim4( |$)'
# In both cases, kill_arg is the argument for the (multi)kill command to send
# SIGUSR1 (at least one OS requires a numeric value).
signal=-USR1
# See if this installation is using the esoteric "USE_NODE" feature of Exim,
# in which it uses the host's name as a suffix for the configuration file name.
if [ "" = "yes" ]; then
hostsuffix=.`uname -n`
fi
# Now find the configuration file name. This has got complicated because
# CONFIGURE_FILE may now be a list of files. The one that is used is the first
# one that exists. Mimic the code in readconf.c by testing first for the
# suffixed file in each case.
set `awk -F: '{ for (i = 1; i <= NF; i++) print $i }' <<End
/etc/exim4/exim4.conf:/var/lib/exim4/config.autogenerated
End
`
while [ "$config" = "" -a $# -gt 0 ] ; do
if [ -f "$1$hostsuffix" ] ; then
config="$1$hostsuffix"
elif [ -f "$1" ] ; then
config="$1"
fi
shift
done
# check we have a config file
if [ "$config" = "" -o ! -f "$config" ]; then
echo Config file not found.
exit 1
fi
# Determine where the spool directory is. Search for an exim_path setting
# in the configure file; otherwise use the bin directory. Call that version of
# Exim to find the spool directory. BEWARE: a tab character is needed in the
# first command below. It has had a nasty tendency to get lost in the past. Use
# a variable to hold a space and a tab. This is less likely to be touched.
st=' '
exim_path=`grep "^[$st]*exim_path" $config | sed "s/.*=[$st]*//"`
if test "$exim_path" = ""; then exim_path=/usr/sbin/exim4; fi
spool_directory=`$exim_path -bP spool_directory | sed "s/.*=[ ]*//"`
process_log_path=`$exim_path -bP process_log_path | sed "s/.*=[ ]*//"`
# The file that Exim writes when sent the SIGUSR1 signal is specified by
# the process_log_path option. If that is not defined, Exim uses the file
# called "exim-process.info" in the spool directory.
log=$process_log_path
if [ "$log" = "" ] ; then
log=$spool_directory/exim-process.info
fi
# Now do the job.
/bin/rm -f ${log}
if [ -f ${log} ]; then
echo "** Failed to remove ${log}"
exit 1
fi
# If there is a multikill command, use it. On some OS this command is called
# "killall" (Linux, FreeBSD). On Solaris it is called "pkill". Note that on
# Solaris, "killall" kills ALL processes - this is the System V version of this
# command, and not what we want!
if [ "$multikill_cmd" != "" ] && type "$multikill_cmd" >/dev/null 2>&1; then
$multikill_cmd $signal "$multikill_arg"
# No multikill command; do it the hard way
else
$ps_cmd $ps_arg | \
egrep "$egrep_arg" | \
awk "{print \"kill $signal \"\$1}" | \
uniq | sh
fi
sleep 1
if [ ! -s ${log} ] ; then echo "No exim process data" ;
else sort -nu ${log} ; fi
# End of exiwhat
|