
У меня возникли проблемы с запуском файла сервисного модуля systemd при перезагрузке сервера. Этот сервер — новая установка CentOS 7.0.1406. Я пытаюсь настроить его с несколькими экземплярами Apache httpd. На старой установке CentOS экземпляры httpd работали нормально, поэтому теперь я пытаюсь перенести эти конфигурации на новую CentOS, которая использует systemd.
Я могу включить службу, запустить ее, перезапустить и остановить без каких-либо проблем. Когда я делаю перезагрузку, он говорит "Нет такого файла или каталога". Если я снова включаю службу, все снова работает до следующей перезагрузки.
Файл обслуживания:
[Unit]
Description=Apache web server instance apache01
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/data/apacheinstances/apache01/logs/httpd.pid
ExecStart=/data/apacheinstances/apache01/bin/apachectl start
ExecStop=/data/apacheinstances/apache01/bin/apachectl stop
ExecReload=/data/apacheinstances/apache01/bin/apachectl reload
PrivateTmp=true
LimitNOFILE=infinity
[Install]
WantedBy=multi-user.target
Как я это включил:
$ sudo systemctl enable /data/apacheinstances/apache01/bin/apache01.service
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/multi-user.target.wants/apache01.service'
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/apache01.service'
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: inactive (dead)
Как я это начал:
$ sudo systemctl start apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: active (running) since Wed 2014-10-08 14:37:56 PDT; 13s ago
Process: 1740 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1746 (httpd)
CGroup: /system.slice/apache01.service
+-1746 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1747 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/error_log-%Y%m
+-1748 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/access_log-%Y%m
+-1749 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1750 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1751 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
Oct 08 14:37:56 server105 apachectl[1740]: Starting apache01: [ OK ]
Oct 08 14:37:56 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:37:56 server105 systemd[1]: Started Apache web server instance apache01.
Как я перезапустил его:
$ sudo systemctl restart apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: active (running) since Wed 2014-10-08 14:38:40 PDT; 12s ago
Process: 1836 ExecStop=/data/apacheinstances/apache01/bin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 1844 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1850 (httpd)
CGroup: /system.slice/apache01.service
+-1850 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1851 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/error_log-%Y%m
+-1852 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/access_log-%Y%m
+-1853 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1855 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1856 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
Oct 08 14:38:40 server105 apachectl[1844]: Starting apache01: [ OK ]
Oct 08 14:38:40 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:38:40 server105 systemd[1]: Started Apache web server instance apache01.
Как я это остановил:
$ sudo systemctl stop apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: inactive (dead) since Wed 2014-10-08 14:39:44 PDT; 12s ago
Process: 1940 ExecStop=/data/apacheinstances/apache01/bin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 1844 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1850 (code=exited, status=0/SUCCESS)
Oct 08 14:38:40 server105 apachectl[1844]: Starting apache01: [ OK ]
Oct 08 14:38:40 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:38:40 server105 systemd[1]: Started Apache web server instance apache01.
Oct 08 14:39:44 server105 systemd[1]: Stopping Apache web server instance apache01...
Oct 08 14:39:44 server105 apachectl[1940]: Stopping apache01: [ OK ]
Oct 08 14:39:44 server105 systemd[1]: Stopped Apache web server instance apache01.
Состояние после перезагрузки:
$ sudo systemctl status apache01
apache01.service
Loaded: not-found (Reason: No such file or directory)
Active: inactive (dead)
Oct 08 14:44:58 server105 systemd[1]: Cannot add dependency job for unit apache01.service, ignoring: Unit apache01.service failed to load: No such file or directory.
Как мне его снова включить и запустить:
$ sudo systemctl reenable /data/apacheinstances/apache01/bin/apache01.service
rm '/etc/systemd/system/apache01.service'
rm '/etc/systemd/system/multi-user.target.wants/apache01.service'
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/multi-user.target.wants/apache01.service'
ln -s '/data/apacheinstances/apache01/bin/apache01.service' '/etc/systemd/system/apache01.service'
$ sudo systemctl start apache01
$ sudo systemctl status apache01
apache01.service - Apache web server instance apache01
Loaded: loaded (/data/apacheinstances/apache01/bin/apache01.service; enabled)
Active: active (running) since Wed 2014-10-08 14:52:20 PDT; 5s ago
Process: 1737 ExecStart=/data/apacheinstances/apache01/bin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 1743 (httpd)
CGroup: /system.slice/apache01.service
+-1743 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1744 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/error_log-%Y%m
+-1745 /usr/local/sbin/cronolog /data/apacheinstances/apache01/logs/access_log-%Y%m
+-1746 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1747 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
+-1748 /usr/local/httpd-2.4.10-apache01/bin/httpd -f /data/apacheinstances/apache01/conf/httpd.conf -k start
Oct 08 14:52:20 server105 apachectl[1737]: Starting apache01: [ OK ]
Oct 08 14:52:20 server105 systemd[1]: PID file /data/apacheinstances/apache01/logs/httpd.pid not readable (yet?) after start.
Oct 08 14:52:20 server105 systemd[1]: Started Apache web server instance apache01.
Я не уверен, почему это работает без проблем до перезагрузки, но потом не работает. Если я не включаю снова, я продолжаю получать ту же ошибку о "Нет такого файла или каталога".
Я пытался исследовать функциональность ведения журнала в systemd, чтобы определить, какой файл или каталог он не может найти, но безуспешно.
Кто-нибудь еще сталкивался с подобным поведением?
решение1
Все службы должны быть загружены и проанализированы перед их запуском, а ваша служба недоступна на ранних этапах процесса загрузки, когда systemd анализирует все службы, поскольку она находится в другом разделе.
Чтобы решить эту проблему, либо оставьте локальные службы, /etc/systemd/system/
либо создайте пакет для своего дистрибутива и поместите их в/usr/lib/systemd/system/