You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rs...@hyperreal.org on 1998/06/10 14:08:52 UTC

cvs commit: apache-1.3/src/support httpd.8 apachectl apachectl.1

rse         98/06/10 05:08:52

  Modified:    src      CHANGES
               src/main http_main.c
               src/support httpd.8 apachectl apachectl.1
  Log:
  Add httpd -t (test) option for running configuration syntax tests only.  If
  something is broken it complains and exits with a return code non-equal to 0.
  
  This can be used manually by the user to check the Apache configuration after
  editing and is also automatically used by apachectl on (graceful) restart
  command to make sure Apache doesn't die on restarts because of a configuration
  which is now broken since the last (re)start.
  
  This way `apachectl restart' can be used inside cronjobs without having to
  expect Apache to be falling down. Additionally the httpd -t can be run via
  `apachectl configtest'.
  
  Submitted by: Ralf S. Engelschall
  Reviewed by: Martin Kraemer, Brian Behlendorf, Jim Jagielski, Dean Gaudet
  PR: 2393
  
  Revision  Changes    Path
  1.909     +11 -0     apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.908
  retrieving revision 1.909
  diff -u -r1.908 -r1.909
  --- CHANGES	1998/06/10 11:28:47	1.908
  +++ CHANGES	1998/06/10 12:08:47	1.909
  @@ -1,5 +1,16 @@
   Changes with Apache 1.3.1
   
  +  *) Add httpd -t (test) option for running configuration syntax tests only.
  +     If something is broken it complains and exits with a return code
  +     non-equal to 0. This can be used manually by the user to check the Apache
  +     configuration after editing and is also automatically used by apachectl
  +     on (graceful) restart command to make sure Apache doesn't die on restarts
  +     because of a configuration which is now broken since the last (re)start.
  +     This way `apachectl restart' can be used inside cronjobs without having
  +     to expect Apache to be falling down. Additionally the httpd -t can be run
  +     via `apachectl configtest'.
  +     [Ralf S. Engelschall] PR#2393
  +  
     *) Minor display fix for "install" target of top-level Makefile:
        the displayed installation command was incorrect although the
        executed command was correct. Now they are in sync.
  
  
  
  1.364     +23 -3     apache-1.3/src/main/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/http_main.c,v
  retrieving revision 1.363
  retrieving revision 1.364
  diff -u -r1.363 -r1.364
  --- http_main.c	1998/06/10 11:23:11	1.363
  +++ http_main.c	1998/06/10 12:08:49	1.364
  @@ -877,7 +877,7 @@
       fprintf(stderr, "Usage: %s [-d directory] [-f file]\n", bin);
   #endif
       fprintf(stderr, "       %s [-C \"directive\"] [-c \"directive\"]\n", pad);
  -    fprintf(stderr, "       %s [-v] [-V] [-h] [-l] [-S]\n", pad);
  +    fprintf(stderr, "       %s [-v] [-V] [-h] [-l] [-S] [-t]\n", pad);
       fprintf(stderr, "Options:\n");
   #ifdef SHARED_CORE
       fprintf(stderr, "  -L directory     : specify an alternate location for shared object files\n");
  @@ -891,6 +891,7 @@
       fprintf(stderr, "  -h               : list available configuration directives\n");
       fprintf(stderr, "  -l               : list compiled-in modules\n");
       fprintf(stderr, "  -S               : show parsed settings (currently only vhost settings)\n");
  +    fprintf(stderr, "  -t               : run syntax test for configuration files only\n");
       exit(1);
   }
   
  @@ -4201,6 +4202,7 @@
   int REALMAIN(int argc, char *argv[])
   {
       int c;
  +    int configtestonly = 0;
   
   #ifdef SecureWare
       if (set_auth_parameters(argc, argv) < 0)
  @@ -4227,7 +4229,7 @@
       ap_setup_prelinked_modules();
   
       while ((c = getopt(argc, argv,
  -				    "C:c:Xd:f:vVhlL:S"
  +				    "C:c:Xd:f:vVhlL:St"
   #ifdef DEBUG_SIGSTOP
   				    "Z:"
   #endif
  @@ -4283,6 +4285,9 @@
   	case 'S':
   	    ap_dump_settings = 1;
   	    break;
  +	case 't':
  +	    configtestonly = 1;
  +	    break;
   	case '?':
   	    usage(argv[0]);
   	}
  @@ -4291,6 +4296,11 @@
       ap_suexec_enabled = init_suexec();
       server_conf = ap_read_config(pconf, ptrans, ap_server_confname);
   
  +    if (configtestonly) {
  +        fprintf(stderr, "Syntax OK\n");
  +        exit(0);
  +    }
  +
       child_timeouts = !ap_standalone || one_process;
   
       if (ap_standalone) {
  @@ -5356,6 +5366,7 @@
       char *cp;
       int run_as_service = 1;
       int install = 0;
  +    int configtestonly = 0;
       
       common_init();
   
  @@ -5380,7 +5391,7 @@
   
       ap_setup_prelinked_modules();
   
  -    while ((c = getopt(argc, argv, "C:c:Xd:f:vVhlZ:iusS")) != -1) {
  +    while ((c = getopt(argc, argv, "C:c:Xd:f:vVhlZ:iusSt")) != -1) {
           char **new;
   	switch (c) {
   	case 'c':
  @@ -5438,6 +5449,9 @@
   	case 'X':
   	    ++one_process;	/* Weird debugging mode. */
   	    break;
  +	case 't':
  +	    configtestonly = 1;
  +	    break;
   	case '?':
   	    usage(argv[0]);
   	}
  @@ -5448,6 +5462,12 @@
       }
   
       server_conf = ap_read_config(pconf, ptrans, ap_server_confname);
  +
  +    if (configtestonly) {
  +        fprintf(stderr, "Syntax OK\n");
  +        exit(0);
  +    }
  +
       if (!child) {
   	ap_log_pid(pconf, ap_pid_fname);
       }
  
  
  
  1.10      +5 -0      apache-1.3/src/support/httpd.8
  
  Index: httpd.8
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/support/httpd.8,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- httpd.8	1998/05/12 11:14:31	1.9
  +++ httpd.8	1998/06/10 12:08:51	1.10
  @@ -149,6 +149,11 @@
   Show the settings as parsed from the config file (currently only shows the
   virtualhost settings).
   .TP
  +.B \-t
  +Run syntax tests for configuration files only. The program immediately exits
  +after these syntax parsing with either a return code of 0 (Syntax OK) or
  +return code not equal to 0 (Syntax Error).
  +.TP
   .B \-X
   Run in single-process mode, for internal debugging purposes only; the daemon
   does not detach from the terminal or fork any children. Do NOT use this mode
  
  
  
  1.7       +28 -7     apache-1.3/src/support/apachectl
  
  Index: apachectl
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/support/apachectl,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- apachectl	1998/03/31 12:53:46	1.6
  +++ apachectl	1998/06/10 12:08:51	1.7
  @@ -12,6 +12,7 @@
   #	5 - httpd could not be started during a restart
   #	6 - httpd could not be restarted during a restart
   #	7 - httpd could not be restarted during a graceful restart
  +#	8 - configuration syntax error
   #
   # When multiple arguments are given, only the error from the _last_
   # one is reported.  Run "apachectl help" for usage info
  @@ -97,10 +98,16 @@
   		ERROR=5
   	    fi
   	else
  -	    if kill -HUP $PID ; then
  -		echo "$0 $ARG: httpd restarted"
  +	    if $HTTPD -t >/dev/null 2>&1; then
  +		if kill -HUP $PID ; then
  +		    echo "$0 $ARG: httpd restarted"
  +		else
  +		    echo "$0 $ARG: httpd could not be restarted"
  +		    ERROR=6
  +		fi
   	    else
  -		echo "$0 $ARG: httpd could not be restarted"
  +		echo "$0 $ARG: configuration broken, ignoring restart"
  +		echo "$0 $ARG: (run 'apachectl configtest' for details)"
   		ERROR=6
   	    fi
   	fi
  @@ -115,10 +122,16 @@
   		ERROR=5
   	    fi
   	else
  -	    if kill -USR1 $PID ; then
  -		echo "$0 $ARG: httpd gracefully restarted"
  +	    if $HTTPD -t >/dev/null 2>&1; then
  +		if kill -USR1 $PID ; then
  +		    echo "$0 $ARG: httpd gracefully restarted"
  +		else
  +		    echo "$0 $ARG: httpd could not be restarted"
  +		    ERROR=7
  +		fi
   	    else
  -		echo "$0 $ARG: httpd could not be restarted"
  +		echo "$0 $ARG: configuration broken, ignoring restart"
  +		echo "$0 $ARG: (run 'apachectl configtest' for details)"
   		ERROR=7
   	    fi
   	fi
  @@ -129,8 +142,15 @@
       fullstatus)
   	$LYNX $STATUSURL
   	;;
  +    configtest)
  +	if $HTTPD -t; then
  +	    :
  +	else
  +	    ERROR=8
  +	fi
  +	;;
       *)
  -	echo "usage: $0 (start|stop|restart|fullstatus|status|graceful|help)"
  +	echo "usage: $0 (start|stop|restart|fullstatus|status|graceful|configtest|help)"
   	cat <<EOF
   
   start      - start httpd
  @@ -140,6 +160,7 @@
   fullstatus - dump a full status screen; requires lynx and mod_status enabled
   status     - dump a short status screen; requires lynx and mod_status enabled
   graceful   - do a graceful restart by sending a SIGUSR1 or start if not running
  +configtest - do a configuration syntax test
   help       - this screen
   
   EOF
  
  
  
  1.5       +14 -3     apache-1.3/src/support/apachectl.1
  
  Index: apachectl.1
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/support/apachectl.1,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- apachectl.1	1998/03/31 12:53:46	1.4
  +++ apachectl.1	1998/06/10 12:08:51	1.5
  @@ -92,6 +92,9 @@
   .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 
  @@ -111,9 +114,17 @@
   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 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.
  
  
  

Re: cvs commit: apache-1.3/src/support httpd.8 apachectl apachectl.1

Posted by Marc Slemko <ma...@worldgate.com>.
On 10 Jun 1998 rse@hyperreal.org wrote:

> rse         98/06/10 05:08:52
> 
>   Modified:    src      CHANGES
>                src/main http_main.c
>                src/support httpd.8 apachectl apachectl.1
>   Log:
>   Add httpd -t (test) option for running configuration syntax tests only.  If
>   something is broken it complains and exits with a return code non-equal to 0.
>   
>   This can be used manually by the user to check the Apache configuration after
>   editing and is also automatically used by apachectl on (graceful) restart
>   command to make sure Apache doesn't die on restarts because of a configuration
>   which is now broken since the last (re)start.
>   
>   This way `apachectl restart' can be used inside cronjobs without having to
>   expect Apache to be falling down. Additionally the httpd -t can be run via
>   `apachectl configtest'.

Would it not be wise to have apachectl configtest actually output
something, at least if it fails and possible if it suceeds too?