1

The following startup script for systemd (Debian GNU/Linux Jessie)

[Unit]
Description=Apache httpd web server
After=network.target

[Service]
PIDFile=/var/run/apache2/apache2.pid
EnvironmentFile=/etc/default/apache2
EnvironmentFile=/etc/apache2/envvars
ExecStart=/usr/sbin/apache2 -d /etc/apache2 -k start

[Install]
WantedBy=multi-user.target

does not work because the executable doesn't pick up the env variables in the EnvironmentFile.

This is what I read in /var/log/daemon.log on service start:

Nov 23 10:05:30 kdc apache2[3111]: AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf:
Nov 23 10:05:30 kdc apache2[3111]: Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}

APACHE_LOCK_DIR is defined in /etc/apache2/envvars which is stock debian stuff:

# envvars - default environment variables for apache2ctl

# this won't be correct after changing uid
unset HOME

# for supporting multiple apache2 instances
if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then
    SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}"
else
    SUFFIX=
fi
# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
# temporary state file location. This might be changed to /run in Wheezy+1
export APACHE_PID_FILE=/var/run/apache2/apache2$SUFFIX.pid
export APACHE_RUN_DIR=/var/run/apache2$SUFFIX
export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX
# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2.
export APACHE_LOG_DIR=/var/log/apache2$SUFFIX

## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG

## The command to get the status for 'apache2ctl status'.
## Some packages providing 'www-browser' need '--dump' instead of '-dump'.
#export APACHE_LYNX='www-browser -dump'

## If you need a higher file descriptor limit, uncomment and adjust the
## following line (default is 8192):
#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536'

## If you would like to pass arguments to the web server, add them below
## to the APACHE_ARGUMENTS environment.
#export APACHE_ARGUMENTS=''

## Enable the debug mode for maintainer scripts.
## This will produce a verbose output on package installations of web server modules and web application
## installations which interact with Apache
#export APACHE2_MAINTSCRIPT_DEBUG=1

I have some more warnings about other environment variables, so I need systemd to read the env files. Really.

  • What is in /etc/apache2/envvars? – Michael Hampton Nov 23 '15 at 9:18
  • I added it inline in the question. – 473183469 Nov 23 '15 at 9:25
  • Strange Debian stuff. Does that lock directory exist? – Michael Hampton Nov 23 '15 at 9:32
  • It exists and it is owner by www-data (the debian correct user for the apache2 daemon). – 473183469 Nov 23 '15 at 9:39
3

The posted envvars is not in the format expected by systemctl:

KEY=VALUE

it is more like a bash script.

Try to fix the format.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.