Seit dem letzten Artikel zum gleichen Thema ist die Entwicklung hin zu Systemd mehr vollzogen worden. Dies führt allerdings zu einem Logrotations Problem.
Da die default Installation des apache2 Paketes mit all seinen Konfigurationsdateien als Template dient, ist es ratsam Konfigurationsänderungen unter /etc/apache2 zu unterlassen und diesen ebenfalls aus dem Start Prozess zu entfernen.
:~# systemctl stop apache2 :~# systemctl disable apache2 Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install disable apache2 Removed /etc/systemd/system/multi-user.target.wants/apache2.service.
Wie gewohnt wird das von Debian zur Verfügung gestellte Skript mit einem frei zu vergebenen Suffix/Namen aufgerufen.
:~# sh /usr/share/doc/apache2/examples/setup-instance multi-xxx Setting up /etc/apache2-multi-xxx ... systemd is in use, no init script installed use the 'apache2@multi-xxx.service' service to control your new instance sample commands: systemctl start apache2@multi-xxx.service systemctl enable apache2@multi-xxx.service Setting up symlinks: a2enmod-multi-xxx a2dismod-multi-xxx a2ensite-multi-xxx a2dissite-multi-xxx a2enconf-multi-xxx a2disconf-multi-xxx apache2ctl-multi-xxx Setting up /etc/logrotate.d/apache2-multi-xxx and /var/log/apache2-multi-xxx ... Setting up /etc/default/apache-htcacheclean-multi-xxx
Die Steuerung der Apache-Multi Instanz wird über Systemd geregelt.
:~# systemctl enable apache2@multi-xxx.service Created symlink /etc/systemd/system/multi-user.target.wants/apache2@multi-xxx.service ? /lib/systemd/system/apache2@.service. :~# systemctl start apache2@multi-xxx.service :~# systemctl stop apache2@multi-xxx.service :~# systemctl status apache2@multi-xxx.service :~# systemctl reload apache2@multi-xxx.service :~# systemctl restart apache2@multi-xxx.service
Insbesondere ist das Augenmerk auf den Hinweise „systemd is in use, no init script installed“ zu richten. Das heißt, dass kein Start/Stop Skript für die gerade erstellte Apache-Multi Instanz unter /etc/init.d/ angelegt wurde.
:~# ls -ld /etc/init.d/apache* -rwxr-xr-x 1 root root 8181 Nov 3 12:34 /etc/init.d/apache2 -rwxr-xr-x 1 root root 2489 Nov 3 12:34 /etc/init.d/apache-htcacheclean
Dies führt nun allerdings vom kopierten und veränderten default Logrotations Skript zu einem Problem. Die betreffenden Zeilen aus dem setup-instance Skript.
:~# cat /usr/share/doc/apache2/examples/setup-instance [...] echo Setting up /etc/logrotate.d/apache2-$SUFFIX and /var/log/apache2-$SUFFIX ... cp -a /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-$SUFFIX perl -p -i -e s,apache2,apache2-$SUFFIX,g /etc/logrotate.d/apache2-$SUFFIX [...]
Das kopierte und angepasste Logrotations Skript
:~# cat /etc/logrotate.d/apache2-multi-xxx /var/log/apache2-multi-xxx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if invoke-rc.d apache2-multi-xxx status > /dev/null 2>&1; then \ invoke-rc.d apache2-multi-xxx reload > /dev/null 2>&1; \ fi; endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript }
Und hier wird das Problem ersichtlich. Die default Installation des apache2 Paketes beinhaltet wie weiter oben gezeigt noch ein /etc/init.d/apache2 Skript. Allerdings schlagen die an die Apache-Multi Instanz angepassten invok-rc.d Befehle fehl.
:~# invoke-rc.d apache2-multi-xxx status Unit apache2-multi-xxx.service could not be found. invoke-rc.d: initscript apache2-multi-xxx, action "status" failed. :~# invoke-rc.d apache2-multi-xxx reload /usr/sbin/invoke-rc.d: 527: /usr/sbin/invoke-rc.d: /etc/init.d/apache2-multi-xxx: not found invoke-rc.d: initscript apache2-multi-xxx, action "reload" failed.
Eine Anpassung hin zu Systemd in dem Logrotations Skript löst augenscheinlich das Problem.
:~# vim /etc/logrotate.d/apache2-multi-xxx [...] if systemctl status apache2@multi-xxx.service > /dev/null 2>&1; then \ systemctl reload apache2@multi-xxx.service > /dev/null 2>&1; \ [...]
Das Ganze wurde auch als Debian-Bug-Report eingestellt. Mittlerweile wurde auch ein Patch der das Problem löst erstellt.