Eu tive um problema semelhante, e acabou por ser um problema do systemd ... não como em um problema com o systemd, mas como no meu não entender como trabalhar com ele.
Então, /run
costumava estar em /var/run
e costumava ser mais ou menos persistente (se eu entendi corretamente). Agora, muitas vezes é em um sistema de arquivos fstmp, portanto, uma reinicialização remove tudo em /run
. Isso pode ser corrigido informando ao systemd que o serviço precisa de um /run
dir:
Meus arquivos tomcat.service
falharam assim:
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=CATALINA_PID=/run/tomcat/tomcat.pid
Environment=CATALINA_HOME=/usr/share/tomcat8/
Environment=CATALINA_BASE=/usr/share/tomcat8/
Environment='CATALINA_OPTS=-server -XX:+UseParallelGC -Dsun.net.inetaddr.ttl=30'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/usr/share/tomcat8/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
PIDFile=/run/tomcat/tomcat.pid
SuccessExitStatus=143
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
Funcionou assim:
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=CATALINA_PID=/run/tomcat/tomcat.pid
Environment=CATALINA_HOME=/usr/share/tomcat8/
Environment=CATALINA_BASE=/usr/share/tomcat8/
Environment='CATALINA_OPTS=-server -XX:+UseParallelGC -Dsun.net.inetaddr.ttl=30'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
RuntimeDirectory=tomcat
RuntimeDirectoryMode=775
ExecStart=/usr/share/tomcat8/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
PIDFile=/run/tomcat/tomcat.pid
SuccessExitStatus=143
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
Eu só precisava fazer o que precede, pois nós "rodamos nosso próprio" tomcat para obter uma nova versão dele.
No entanto, algumas vezes tivemos o mesmo erro com o apache, mas com uma causa diferente: Aparentemente, o problema se resumiu ao fato de que ligamos a um servidor ldap antes de instalar o httpd, e O servidor ldap tem um usuário e um grupo do apache. Quando os scripts de instalação do apache viram o usuário e o grupo, ele não criou o usuário e o grupo local. No entanto, o usuário e grupo ldap, às vezes, não estariam disponíveis (rede lenta?) Quando um serviço systemd-tmpfiles-setup.service
é executado no momento da inicialização. Esse serviço é uma maneira diferente de criar o diretório de tempo de execução ... Então forçamos um usuário e um grupo do apache local (com o mesmo uid / gid listado no ldap), e tudo é dourado.
Eu não sou de forma alguma um expert em nada disso, estou documentando principalmente o que nosso cara mais velho encontrou ao tentar orquestrar aplicativos apache / tomcat com o Puppet. Espero que isso ajude alguém.
Há outro post relacionado a este: O diretório PidFile do Apache é removido a cada inicialização