.TH apachectl 8 "February 2004"
.\" Licensed to the Apache Software Foundation (ASF) under one or more
.\" contributor license agreements.  See the NOTICE file distributed with
.\" this work for additional information regarding copyright ownership.
.\" The ASF licenses this file to You under the Apache License, Version 2.0
.\" (the "License"); you may not use this file except in compliance with
.\" the License.  You may obtain a copy of the License at
.\"
.\"     http://www.apache.org/licenses/LICENSE-2.0
.\"
.\" Unless required by applicable law or agreed to in writing, software
.\" distributed under the License is distributed on an "AS IS" BASIS,
.\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.\" See the License for the specific language governing permissions and
.\" limitations under the License.
.\"
.SH NAME
apachectl \- Apache HTTP server control interface
.SH SYNOPSIS
.B apachectl 
\fIcommand\fP [...]
.SH DESCRIPTION
.B apachectl
is a front end to the Apache HyperText Transfer Protocol (HTTP) 
server.  It is designed to help the administrator control the 
functioning of the Apache 
.B httpd
daemon.  
.PP
.B NOTE: 
If your Apache installation uses non-standard paths, you will need to 
edit the 
.B apachectl
script to set the appropriate paths to your PID file and your 
.B httpd
binary.  See the comments in the script for details.
.PP
The 
.B apachectl
script returns a 0 exit value on success, and >0 if an error 
occurs.  For more details, view the comments in the script.
.PP
Full documentation for Apache is available at 
.B http://httpd.apache.org/
.
.SH OPTIONS
The \fIcommand\fP can be any one or more of the following options:
.TP 12
.BI start
Start the Apache daemon.  Gives an error if it is already running.
.TP
.BI stop
Stops the Apache daemon.
.TP
.BI restart
Restarts the Apache daemon by sending it a SIGHUP.  If the daemon
is not running, it is started.
This command automatically checks the configuration files via 
.BI configtest
before initiating the restart to make sure Apache doesn't die.
.TP
.BI fullstatus
Displays a full status report from 
.B mod_status. 
For this to work, you need to have mod_status enabled on your server 
and a text-based browser such as \fIlynx\fP available on your system.  The
URL used to access the status report can be set by editing the
.B STATUSURL
variable in the script.
.TP
.BI status
Displays a brief status report.  Similar to the fullstatus option,
except that the list of requests currently being served is omitted.
.TP
.BI graceful
Gracefully restarts the Apache daemon by sending it a SIGUSR1.  If
the daemon is not running, it is started.  This differs from a
normal restart in that currently open connections are not aborted.
A side effect is that old log files will not be closed immediately.
This means that if used in a log rotation script, a substantial delay may be
necessary to ensure that the old log files are closed before processing them.
This command automatically checks the configuration files via 
.BI configtest
before initiating the restart to make sure Apache doesn't die.
.TP
.BI configtest
Run a configuration file syntax test. It parses the configuration
files and either reports 
.B "Syntax Ok"
or detailed information about the particular syntax error.
.TP
.BI help
Displays a short help message.
.SH SEE ALSO
.BR httpd(8)
.
