I've been searching for an hour and have found a hundred examples that use it, but no explanation of what it does. I did check man apache2ctl
; it doesn't explain the k flag either (elthough it does use it in examples).
2 Answers
Yeah, it's a little buried in the description:
When acting in pass-through mode,
apachectl
can take all the arguments available for thehttpd
binary.apachectl [ httpd-argument ]
So let's look at http
's documentation then:
-k start|restart|graceful|stop|graceful-stop
Signals
httpd
to start, restart, or stop.
So if you use -k <option>
, you'll simply pass on to httpd
, which needs this argument.
If you don't use the -k
, apache2ctl
will instead look for commands that it will handle itself, which are again the same as httpd
would take.
Looking at the source code exhibits this behavior, where a case
statement checks whether the first argument is one of the recognized internal commands, and finally (as a fallback), everything's passed onto httpd
.
case $ARGV in
start)
HTTPD ${APACHE_ARGUMENTS} -k $ARGV # <= note the -k here
# ...
stop|graceful-stop)
# ...
# ...
*)
$HTTPD ${APACHE_ARGUMENTS} $ARGV
ERROR=$?
esac
-
I'm new to this. Could you explain to me in plain English what ommitting the k flag will actually do? On my Ubuntu server it seems to make no difference if I use the k flag or not, it always restarts successfully as far as I can tell. Nov 24, 2015 at 11:29
-
What you're seeing is normal. Like I said, if you do not use
-k
, thenapachectl
will handle the commands itself, but it does the same ashttpd
. If you use-k
, the command is passed on tohttpd
as-is.– slhckNov 24, 2015 at 15:08 -
I still don't really know what that means in terms of functionality, to be honest, but are you saying then that it doesn't matter if you use the -k flag or not, it will do the same thing in a roundabout way? Nov 24, 2015 at 16:12
-
1That's what I'm saying, yeah. It's for historical reasons that both work.– slhckNov 24, 2015 at 21:42
-
"little buried"? Why not to call this - the apache documentation really sucks. I do not think this is for historical reasons, is for reasons of passing also other arguments to httpd.– PaloMar 4, 2020 at 6:00
Edit to add: Sorry, slhck types faster than me :D
'apache2ctl' is actually just a front-end for the 'httpd' executable and runs in two modes depending on if you're wanting it to be SysV init scriptable or if you're wanting to pass-through options to the httpd executable. The -k actually gets passed through to httpd.
http://httpd.apache.org/docs/2.2/programs/apachectl.html
When acting in pass-through mode, apachectl can take all the arguments available for the httpd binary.
apachectl [ httpd-argument ]
So from the httpd man page, http://httpd.apache.org/docs/2.2/programs/httpd.html
-k start|restart|graceful|stop|graceful-stop Signals httpd to start, restart, or stop.