Заменитьinit.sh
:
#!/bin/bash
# define path to custom docker environment
DOCKER_ENVVARS=/etc/apache2/docker_envvars
# write variables to DOCKER_ENVVARS
cat << EOF > "$DOCKER_ENVVARS"
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_LOG_DIR=/var/log/apache2
export APACHE_LOCK_DIR=/var/lock/apache2
export APACHE_PID_FILE=/var/run/apache2.pid
export APACHE_RUN_DIR=/var/run/apache2
EOF
# source environment variables to get APACHE_PID_FILE
. "$DOCKER_ENVVARS"
# only delete pidfile if APACHE_PID_FILE is defined
if [ -n "$APACHE_PID_FILE" ]; then
rm -f "$APACHE_PID_FILE"
fi
# start other services
service exim4 start
service dovecot start
service fetchmail start
# line copied from /etc/init.d/apache2
ENV="env -i LANG=C PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# use apache2ctl instead of /usr/sbin/apache2
$ENV APACHE_ENVVARS="$DOCKER_ENVVARS" apache2ctl -DFOREGROUND
Наконец-то я нашел обходной путь. Вам нужен второй скрипт, который содержит
#!/bin/bash
echo /pathto/runApp | at now
Этот сценарий должен вызываться из правила udev. Чтобы он работал, at
должен быть установлен, и вы должны включить atd
, вызвав sudo systemctl enable atd --now
. Это немного хакерски, но, по крайней мере, это работает.
Я удалил подход systemd, чтобы этот пост был более простым руководством.