25

Is there a way to stop the Apache server without terminating executing requests, basically a way to tell it - don't accept any more connections and shut down when you finish your current ones?

Peter Mortensen
  • 2,319
  • 5
  • 23
  • 24
php_nub_qq
  • 379
  • 3
  • 9

3 Answers3

38

Yes.

apachectl -k graceful-stop

https://httpd.apache.org/docs/2.4/stopping.html

Sven
  • 97,248
  • 13
  • 177
  • 225
12

Use apachectl -k graceful-stop from here:

The WINCH or graceful-stop signal causes the parent process to advise the children to exit after their current request (or to exit immediately if they're not serving anything). The parent will then remove its PidFile and cease listening on all ports. The parent will continue to run, and monitor children which are handling requests. Once all children have finalised and exited or the timeout specified by the GracefulShutdownTimeout has been reached, the parent will also exit.

B. Miller
  • 667
  • 3
  • 9
1

Keep in mind that sys-v init used to do graceful stop by default and had force-stop as an extra option. A “special” option to gracefully stop is only needed if you run a custom process manager that normally kills processes.

John Keates
  • 681
  • 4
  • 9
  • This answer could give the impression that because `systemd` isn't a custom process manager it doesn't kill the process. However, by default systemd also performs a `stop` not a `graceful-stop` for apache. – B. Miller May 29 '18 at 18:53
  • 4
    @B.Miller if your systemd performs a stop instead of a graceful-stop, that's an OS-specific bug that needs to be logged. Arch Linux and CentOS 7 both perform graceful stops. – Harald May 29 '18 at 19:41
  • Debian does a graceful stop too – John Keates May 29 '18 at 19:45
  • 2
    Interesting @JohnKeates ... maybe this is Ubuntu 18.04 specific. 18.04 uses the stop command `/usr/sbin/apachectl stop` – B. Miller May 29 '18 at 20:37