如何在 CentOS7 上将创建 pidfile 添加到旧的 sysv init 脚本中?

如何在 CentOS7 上将创建 pidfile 添加到旧的 sysv init 脚本中?

我有旧的 sysv init 脚本,用于在 CentOS7 上启动 tomcat

我知道:需要在 sysv 初始化脚本中创建 pid 文件。

脚本有创建 pid 文件的代码。

但 pid 文件未创建

如何在 CentOS7 上将创建 pidile 添加到旧的 sysv init 脚本中?

#!/bin/bash
#
# tomcat      This shell script takes care of starting and stopping Tomcat
#
# chkconfig: - 80 20
# pidfile: /var/run/tomcat.pid
#
### BEGIN INIT INFO
# Provides: tomcat
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: Release implementation for Servlet 2.5 and JSP 2.1
# Short-Description: start and stop tomcat


# Source function library.
. /etc/rc.d/init.d/functions

prog=tomcat
# Timeout for waiting stopping $prog
timeout=5
status_pattern='catalina.home=/var/lib/tomcat7'
STARTUP_LOG=/var/log/tomcat7/startup.out
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
pidfile=/var/run/tomcat.pid

get_pid () {
    PID=`ps -ef | grep ${status_pattern} | grep -v grep | sed 's/\s\+/ /g' | cut -f 2 -d ' '`
}

start () {
    if [ "$EUID" != "0" ]; then
        echo "User has insufficient privilege."
        exit 4
    fi

    # Check before running
    get_pid
    if [[ ! -z ${PID} ]]; then
        echo -n $"$prog is already running: ${PID}"
        echo
        exit 0
    fi

    echo -n $"Starting $prog: "
    runuser -s /bin/bash tomcat /var/lib/tomcat7/bin/startup.sh 2>&1 > $STARTUP_LOG && success || failure $"$prog start"
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
       ps aux | grep $exec | grep -v grep | tr -s " " | cut -d " " -f2 > $pidfile
    fi
    echo
}

stop () {
    if [ "$EUID" != "0" ]; then
        echo "User has insufficient privilege."
        exit 4
    fi

    # Check before stopping
    get_pid
    if [[ -z ${PID} ]]; then
        echo -n $"$prog is not running"
        echo
        return 0
    fi

    echo -n $"Stopping $prog: "
    runuser -s /bin/bash tomcat /var/lib/tomcat7/bin/shutdown.sh 2>&1 >> $STARTUP_LOG

    # Check progress of the stopping
    ps -p ${PID} 2>&1 > /dev/null
    RUNNING=$?
    if [[ ${RUNNING} -eq 0 ]]; then
        for i in `seq ${timeout}`; do
            echo
            echo -n "Waiting for stopping..."
            sleep 1
            ps -p ${PID} 2>&1 > /dev/null
            if [[ $? -ne 0 ]]; then
                STOPPED="true"
                break
            fi
        done
        if [[ ${STOPPED} != "true" ]]; then
            failure $"Can not stopped ${prog} softly"
            echo
            echo "Forcibly killed ${PID}"
            kill -9 ${PID}
            return 0
        fi
    if [ ${STOPPED} == "true" ]; then
      rm -f $pidfile
      success; echo
    fi
    fi
    success
    echo
}

status () {
    get_pid
    if [[ -z ${PID} ]]; then
        echo -n $"$prog is not running"
        echo
        return 7
    else
        echo -n $"$prog current PID is ${PID}"
        echo
        return 0
    fi
}

case "$1" in
  start)
    start
    ;;

  stop)
    stop
    ;;

  status)
    status
    ;;

  restart)
    stop
    start
    ;;

  *)
    echo $"Usage: $0 {start|stop|restart|status}"
    exit 2

esac

systemctl status tomcat7.service 说:

systemd[1]: Starting LSB: start and stop tomcat...
runuser[11651]: pam_unix(runuser:session): session opened for user tomcat by (uid=0)
tomcat7[11642]: [67B blob data]
tomcat7[11642]: Try 'grep --help' for more information.
systemd[1]: Failed to read PID from file /var/run/tomcat.pid: Invalid argument
systemd[1]: tomcat7.service start operation timed out. Terminating.
systemd[1]: Failed to start LSB: start and stop tomcat.
systemd[1]: Unit tomcat7.service entered failed state.
systemd[1]: tomcat7.service failed.

谢谢!

相关内容