summaryrefslogtreecommitdiffstats
path: root/conf/postfix-wrapper
blob: dd0a517627fa24d1e260a81a3defd4a0d5909375 (plain)
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/bin/sh

#++
# NAME
#	postfix-wrapper 1
# SUMMARY
#	trivial but useful multi-instance manager
# SYNOPSIS
#	postfix command
# DESCRIPTION
#	Postfix versions 2.6 and later provide support for multiple
#	Postfix instances. Instances share executable files and
#	documentation, but have their own directories for configuration,
#	queue and data files. In many cases different instances
#	have different myhostname and inet_interfaces settings,
#	though this is not always necessary.
#
#	This command implements a trivial Postfix multi-instance
#	manager. It simply applies commands such as "postfix start"
#	to all the applicable Postfix instances.
# MANAGING MULTIPLE INSTANCES
# .ad
# .fi
#	To hook the postfix-wrapper multi-instance manager into
#	Postfix, see the POSTFIX-WRAPPER INITIALIZATION section
#	below.  To create a new Postfix instance, see the CREATING
#	A NEW POSTFIX INSTANCE section below.
#
#	To start, stop, get status, etc., with multiple Postfix
#	instances, use:
#
# .nf
#	    # postfix command
# .fi
#
#	For example, to find out what Postfix instances are configured:
#
# .nf
#	    # postfix status
# .fi
#
#	The postfix(1) command invokes the postfix-wrapper command.
#	This in turn applies the postfix(1) command to the default
#	Postfix instance, and to each instance specified with the
#	default main.cf file's multi_instance_directories parameter
#	value.
#
#	The postfix-wrapper command will start, stop, reload, etc.,
#	only Postfix instances that have "multi_instance_enable =
#	yes" in their main.cf files.  When an instance is disabled,
#	postfix-wrapper replaces "start" commands by "check" so
#	that problems will still be reported.
#
#	The startup order is taken from the multi_instance_directories
#	parameter; the default instance is prepended to the list.
#	The startup order is used for all postfix(1) commands,
#	except for commands that stop Postfix instances. In those
#	cases the order is reversed.
# MANAGING INDIVIDUAL INSTANCES
# .ad
# .fi
#	To manage an individual Postfix instance, use:
#
# .nf
#	    # postfix -c /path/to/config_directory command
# .fi
#
#	This is also needed to manage the default Postfix instance,
#	after you turn on multi-instance support.
#
#	To use the Postfix sendmail command with a non-default
#	Postfix instance, use:
#
# .nf
#	    # sendmail -C /path/to/config_directory ...
# .fi
#
#	Note 1: that's capital C, not lower-case c.
#
#	Note 2: only the default Postfix instance will check or
#	update the shared Postfix files, including the executable
#	files and documentation.
# POSTFIX-WRAPPER INITIALIZATION
# .ad
# .fi
#	To hook this program into Postfix, execute the command
#	shown below.
#
#	This command should be entered as one line.
#
#	In the example, replace /etc/postfix with the default Postfix
#	configuration directory, and replace /usr/libexec/postfix
#	with the daemon directory pathname of the default Postfix
#	instance.
#
# .nf
#	    # postconf -c /etc/postfix -e
#		"multi_instance_enable=yes"
#		"multi_instance_wrapper=/usr/libexec/postfix/postfix-wrapper"
# .fi
# CREATING A NEW POSTFIX INSTANCE
# .ad
# .fi
#	To create a Postfix instance called "postfix-test", start
#	with generic main.cf and master.cf files and customize the
#	locations of the queue and data directories with the commands
#	shown below.  The last command updates main.cf and creates
#	any directories that Postfix will need.
#
#	Each command below should be entered as one line.
#
#	In the example, replace /etc/postfix with the default Postfix
#	configuration directory, and replace /usr/libexec/postfix
#	with the daemon directory pathname of the default Postfix
#	instance.
#
# .nf
#	    # mkdir /etc/postfix-test
#	    # cp /usr/libexec/postfix/main.cf /etc/postfix-test
#	    # cp /usr/libexec/postfix/master.cf /etc/postfix-test
#	    # postconf -c /etc/postfix-test -e 
#		"multi_instance_name=postfix-test"
#	    # postfix -c /etc/postfix post-install
#		"config_directory=/etc/postfix-test"
#		"queue_directory=/var/spool/postfix-test"
#		"data_directory=/var/lib/postfix-test"
#		create-missing
# .fi
#
#	Register this Postfix instance with the default instance.
#	This command should be entered as one line.
#
# .nf
#	    # postconf -e "multi_instance_directories=`postconf
#		-h multi_instance_directories` /etc/postfix-test"
# .fi
#
#	Edit the myhostname and inet_interfaces main.cf parameters,
#	so that they will not conflict with the default Postfix
#	instance, and change whatever else needs to be changed.
#
#	Test the instance with:
#
# .nf
#	    # postfix -c /etc/postfix-test start
#	    # postfix -c /etc/postfix-test status
#	    [ other tests ... ]
# .fi
#
#	When everything is working satisfactorily, enable start/stop/etc.
#	by the multi-instance manager:
#
# .nf
#	    # postconf -c /etc/postfix-test -e multi_instance_enable=yes
# DIAGNOSTICS
# .ad
# .fi
#	When an operation fails, the affected Postfix instance logs
#	a message, and the multi-instance manager skips to the next
#	instance.
# BUGS
#	Support for the multi_instance_group feature is not implemented.
# SEE ALSO
#	postfix(1) Postfix control program
#	postfix-wrapper(5) multi-instance manager API
#	postmulti(1) full-blown multi-instance manager
# LICENSE
# .ad
# .fi
#	The Secure Mailer license must be distributed with this software.
# AUTHOR(S)
#	Wietse Venema
#	IBM T.J. Watson Research
#	P.O. Box 704
#	Yorktown Heights, NY 10598, USA
#--

# Sanity checks.

: ${command_directory?"do not invoke this command directly"}
: ${daemon_directory?"do not invoke this command directly"}

# Readability.

POSTCONF=$command_directory/postconf
POSTFIX=$command_directory/postfix

# Canonicalize the instance directory list. The list is specified
# in startup order.

instance_dirs=`$POSTCONF -h multi_instance_directories | sed 's/,/ /'` ||
    exit 1

case "$1" in
  stop|quick-stop|abort|drain)
	all_dirs=
	for dir in $config_directory $instance_dirs
	do
	    all_dirs="$dir $all_dirs"
	done;;
     *) all_dirs="$config_directory $instance_dirs";;
esac

# Execute the command on all applicable instances. When a Postfix
# instance is disabled, replace "postfix start" by "postfix check"
# so that problems will still be reported.

err=0
for dir in $all_dirs
do
    case "$1" in
    start)
	test "`$POSTCONF -c $dir -h multi_instance_enable`" = yes || {
	    $POSTFIX -c $dir check || err=$?
	    continue
	};;
    stop|abort|drain|flush|reload)
	test "`$POSTCONF -c $dir -h multi_instance_enable`" = yes ||
	    continue;;
    esac
    $POSTFIX -c $dir "$@" || err=$?
done

exit $err