jenkins systemctl failed

# jenkins systemctl 상태를 확인하면 Failed 로 나온다.
sudo systemctl status jenkins -n 30 -l

# jenkins 서비스(데몬) 시작시 문제가 되는 부분을 찾기 위해 디버깅
sudo vi /etc/init.d/jenkins
...
case "$1" in
    start)
        echo -n "Starting Jenkins "
        daemon --user "$JENKINS_USER" --pidfile "$JENKINS_PID_FILE" $JAVA_CMD $PARAMS > /dev/null
        RETVAL=$?
        echo "java version: $(/usr/bin/java -version 2>&1 | grep -i version)"
        echo "JENKINS_USER: $JENKINS_USER"
        echo "JENKINS_PID_FILE: $JENKINS_PID_FILE"
        echo "JAVA_CMD: $JAVA_CMD"
        echo "PARAMS: $PARAMS"
        echo "RETVAL: $RETVAL"
        if [ $RETVAL = 0 ]; then
...

# 실제 다음과 같은 명령이 실행된다.
# 참고로 daemon 은 . /etc/init.d/functions 로 로딩한 함수다.
daemon --user ysoftman --pidfile /var/run/jenkins.pid /usr/bin/java -Djava.awt.headless=true -Dcom.sun.jndi.ldap.connect.pool.maxsize=20 -Dcom.sun.jndi.ldap.connect.pool.prefsize=10 -Dcom.sun.jndi.ldap.connect.pool.timeout=5000 -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20

# /etc/init.d/jenkins 변경 사항 반영을 위해 다시 로딩
sudo systemctl daemon-reload

# jenkins 서비스 재시작
sudo systemctl restart jenkins

# daemon 함수 실행시 root 가 아니라고 메시지로 실패(RETVAL=1)된다.
Starting Jenkins runuser: may not be used by non-root users

# 해결방법
# /etc/sysconfig/jenkins 에서 다음과 같이 root 로 변경한다.
JENKINS_USER="root"

# 그리고 /etc/init.d/jenkins 의 daemon 실행시 --user 옵션없이 다음과 같이 실행한다.
daemon --pidfile "$JENKINS_PID_FILE" $JAVA_CMD $PARAMS > /dev/null

# 이제 다시 시작하면 아름 스샷과 같이 데몬서비스로 동작한다.
sudo systemctl daemon-reload
sudo systemctl restart jenkins

comments:

댓글 쓰기