새로운 CentOS 7 가상 머신에 Tomcat을 설치하려고 합니다. Apache httpd를 성공적으로 설치했으며 네트워크에 있는 다른 컴퓨터의 웹 브라우저에 가상 머신의 IP를 입력했을 때 Apache 테스트 페이지를 얻을 수 있었습니다. 하지만 입력하면 다음과 같은 오류 메시지가 나타납니다 systemctl start tomcat
.
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
다음은 Java 및 Tomcat 설치 명령의 전체 내역입니다.
처음에는 다음을 사용하여 Java를 설치하기 시작했습니다.이 튜토리얼의 지침왜냐하면 Tomcat 지침(아래 두 번째 블록)에서는 openjdk를 사용하도록 하고 실제 Java를 사용해야 하기 때문입니다.
//Install Java
# cd /opt/
# yum install wget
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jdk-8u60-linux-x64.tar.gz"
# tar xzf jdk-8u60-linux-x64.tar.gz
# cd /opt/jdk1.8.0_60/
# alternatives --install /usr/bin/java java /opt/jdk1.8.0_60/bin/java 2
# alternatives --config java
(Select the version you want)
# alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_60/bin/jar 2
# alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_60/bin/javac 2
# alternatives --set jar /opt/jdk1.8.0_60/bin/jar
# alternatives --set javac /opt/jdk1.8.0_60/bin/javac
# java -version (checks to see you install correct version)
# export JAVA_HOME=/opt/jdk1.8.0_60
# export JRE_HOME=/opt/jdk1.8.0_60/jre
# export PATH=$PATH:/opt/jdk1.8.0_60/bin:/opt/jdk1.8.0_60/jre/bin
이전 튜토리얼에서는 환경 변수를 에 넣는 방법을 설명하지 않았기 /etc/environment
때문에 해당 명령 전에 중지했습니다.
다음 명령은여기 또 다른 튜토리얼이 있습니다. Java를 설치한 후 시작했습니다.
//Install Tomcat
Login as sudo user, not root.
# sudo groupadd tomcat
# sudo useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat
# cd ~
# wget http://mirrors.gigenet.com/apache/tomcat/tomcat-8/v8.0.27/bin/apache-tomcat-8.0.27.tar.gz
# sudo mkdir /opt/tomcat
# sudo tar xvf apache-tomcat-8*tar.gz -C /opt/tomcat --strip-components=1
# cd /opt/tomcat
# sudo chgrp -R tomcat conf
# sudo chmod g+rwx conf
# sudo chmod g+r conf/*
# sudo chown -R tomcat work/ temp/ logs/
# sudo vi /etc/systemd/system/tomcat.service
Cut and paste the following file contents:
##################################################
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
##################################################
# sudo systemctl daemon-reload
# sudo systemctl start tomcat
Job for tomcat.service failed. See 'systemctl status tomcat.service' and 'journalctl -xn' for details.
# sudo systemctl start tomcat.service
tomcat.service 작업이 실패했습니다. 자세한 내용은 "systemctl status tomcat.service" 및 "journalctl -xn"을 참조하세요. # sudo systemctl은 tomcat.service를 활성화합니다. ln -s '/etc/systemd/system/tomcat.service' '/etc/systemd/system/multi-user.target.wants/tomcat.service' # sudo systemctl은 tomcat을 활성화합니다.
# sudo systemctl status tomcat.service
tomcat.service - Apache Tomcat Web Application Container
Loaded: loaded (/etc/systemd/system/tomcat.service; enabled)
Active: failed (Result: exit-code) since Tue 2015-10-13 11:05:31 PDT; 47s ago
Oct 13 11:05:31 localhost.localdomain kill[20887]: -q, --queue <sig> use sigqueue(2) rather than kill(2)
Oct 13 11:05:31 localhost.localdomain kill[20887]: -p, --pid print pids without signaling them
Oct 13 11:05:31 localhost.localdomain kill[20887]: -l, --list [=<signal>] list signal names, or convert one to a name
Oct 13 11:05:31 localhost.localdomain kill[20887]: -L, --table list signal names and numbers
Oct 13 11:05:31 localhost.localdomain kill[20887]: -h, --help display this help and exit
Oct 13 11:05:31 localhost.localdomain kill[20887]: -V, --version output version information and exit
Oct 13 11:05:31 localhost.localdomain kill[20887]: For more details see kill(1).
Oct 13 11:05:31 localhost.localdomain systemd[1]: tomcat.service: control process exited, code=exited status=1
Oct 13 11:05:31 localhost.localdomain systemd[1]: Failed to start Apache Tomcat Web Application Container.
Oct 13 11:05:31 localhost.localdomain systemd[1]: Unit tomcat.service entered failed state.
권장사항에 따라 yum localinstall
업데이트된 jdk rpm을 실행하세요.다른 포스팅에서, 작동 안함.
편집하다:
@Bram의 제안에 따라 구성 파일을 다음과 같이 변경했지만 여전히 동일한 오류가 발생합니다.
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/opt/jdk1.8.0_60
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
또한 채팅에 있는 @JeffSchaller의 의견에 따라 Tomcat이 다음과 같이 기본적으로 시작되도록 할 수 있었습니다.
[user@localhost tomcat]$ sudo /opt/tomcat/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat/temp
Using JRE_HOME: /
Using CLASSPATH: /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar
Tomcat started.
[user@localhost tomcat]$
따라서 이 OP의 문제는 시스템 구성과 관련된 것 같습니다. 어떻게 해결할 수 있나요?
답변1
나는 같은 문제가 있었고 다음과 같이 해결했습니다.
Tomcat 사용자에게
tomcat
전체 디렉터리의 소유권을 부여합니다.cd /opt && sudo chown -R tomcat tomcat/
그리고 /etc/systemd/system/tomcat.service에서 다음 줄을 주석 처리합니다.
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
답변2
기본 위치가 아닌 위치에 Java를 설치했으므로 Tomcat에게 Java를 찾을 수 있는 위치를 알려주어야 합니다.
게시하신 유닛 파일에서는 JAVA_HOME이 /usr/lib/jvm/jre로 설정되어 있는데, Java 설치 부분에서는 JAVA_HOME이 /opt/jdk1.8.0_60으로 되어 있습니다.
Tomcat 시스템 단위 파일에 JAVA_HOME을 설정하면 작동할 것이라고 믿습니다.
단위 파일은 사용자 tomcat도 지정합니다. 그러나 수동으로 시작하면 루트로 시작됩니다. 문제는 Tomcat이 권한 있는 포트를 열려고 할 가능성이 높습니다. 시작 스크립트가 Tomcat을 루트로 시작합니까? 아니면 사용자 tomcat으로 프로세스를 시작합니까? 유닛 파일에서 사용자 및 그룹을 제거하면 명령줄 시도와 동일한 동작이 트리거되어야 합니다.
답변3
오류 메시지를 보면 ExecStop=/bin/kill -15 $MAINPID
변수가 대체되지 않는 부분이 문제인 것 같습니다. 서비스 문서에 따르면 $MAINPID
이는 명령을 통해서만 작동할 것으로 예상됩니다 ExecReload
. 문제는 여전히 남아 있습니다. 왜 ExecStop
트리거에서 실행 됩니까 start
?
JVM 프로세스 작업 디렉토리는 배포된 애플리케이션과 관련이 없을 수 있으므로 systemd
남겨질 수 있습니다./
CATALINA_OPTS
스크립트 로 가서 먼저 다음과 같은 간단한 구성을 시도해 보시기 바랍니다 JAVA_OPTS
./opt/tomcat/bin/setenv.sh
[Unit]
Description=Apache Tomcat
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/java/default
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
WorkingDirectory=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
아무튼 제보 journalctl -xn
와 logs/catalina.out
내용 부탁드립니다