Apache 2.4 AH01762 & AH01760: failed to initialize shm (Shared Memory Segment)
Mattias Geniar, Tuesday, January 12, 2016
I recently ran into the following problem on an Apache 2.4 server, where after server reboot the service itself would no longer start.
This was the error whenever I tried to start it:
$ tail -f error.log [auth_digest:error] [pid 11716] (2)No such file or directory: AH01762: Failed to create shared memory segment on file /run/httpd/authdigest_shm.11716 [auth_digest:error] [pid 11716] (2)No such file or directory: AH01760: failed to initialize shm - all nonce-count checking, one-time nonces, and MD5-sess algorithm disabled
Systemd reported the same problem;
$ systemctl status -l httpd.service - httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since ...
The cause is shown in the first error message: Failed to create shared memory segment on file /run/httpd/authdigest_shm.11716.
If I traced this, I noticed the directory /run/httpd
no longer existed. The simple fix in this case, was to re-create that missing directory.
$ mkdir /run/httpd $ chown root:httpd /run/httpd $ chmod 0710 /run/httpd
The directory should be owned by root and writeable for the root user. The Apache group (in my case, httpd
), needs executable rights to look into the directory.
iven facility which allows non-dependent subsystems to be started, controlled, or stopped in parallel. Here we explain how to add a custom script to the systemd facility.
1. Write And Debug The Custom Script
Typically a systemd script is written as a shell script. Begin by writing your custom script using the normal conventions. We will call our script my-custom-script.sh and is straightforward:
#!/bin/sh echo "I am a custom script" > /var/tmp/script.out echo "The script was run at : `date`" >> > /var/tmp/script.out
The script must be executable.
# chmod 0755 /var/tmp/my-custom-script.sh
2. Describe The Custom Script To systemd
With the script written and tested manually, the script is ready to be described to the systemd system. To do this, a [name].service file is needed. The syntax uses the INI format commonly used for configuration files. Continuing our example, we need a my-custom-script.service file. The executable will run exactly once for each time the service is started. The service will not be started until the networking layer is up and stable.
Create a new service unit file at /etc/systemd/system/my-custom-script.service with below content. The name of the service unit is user defined and can be any name of your choice.
# This is my-custom-script.service, which describes the my-custom-script.sh file [Unit] Description=This is executed on shutdown or reboot DefaultDependencies=no Wants=network-pre.target # (if network is required before running the script) Before=network-pre.target shutdown.target reboot.target halt.target # Defines the order in which units are stoped. #(REQUIRED) [Service] Type=oneshot # enables specifying multiple custom commands that are then executed sequentially. (REQUIRED) RemainAfterExit=true # required by the oneshot setting (REQUIRED) Environment=ONE='one' "TWO='2" # you can set some environment variables, that may be necessary to pass as arguments ExecStart=/bin/true # because is a shutdown script nothing is done when this service is started ExecStop=/bin/bash /var/tmp/my-custom-script.sh ${ONE} ${TWO} # < --*********** change to the script full path ************ (REQUIRED) TimeoutStopSec=1min 35s # Configures the time to wait for stop. [Install] WantedBy=multi-user.target # When this unit is enabled, the units listed in WantedBy gain a Want dependency on the unit. (REQUIRED)
3. Enable The Script For Future Reboots
Similar to the chkconfig from earlier versions, the service must be enabled. Since a new service was added, notify the systemd daemon to reconfigure itself:
# systemctl enable my-custom-script.service # systemctl daemon-reload
Recent Comments