Назад | Перейти на главную страницу

'systemctl restart service' не работает на CentOS 7

У меня есть настраиваемая служба, управляемая сценарием инициализации в /etc/init.d, и после обновления до CentOS 7 с помощью systemd «служба перезапуска systemctl» работает некорректно. Мне нужно дважды выполнить «systemctl restart service», чтобы он перезапустился (в первый раз он просто останавливает его, он не запускает его после остановки). Я точно не знаю, что происходит, но если я остановлю службу с помощью '/etc/init.d/service stop', процесс будет убит и не будет отображаться в 'ps aux', но 'systemctl status service' говорит, что это «активный».

Это мой сценарий инициализации в /etc/init.d:

#!/bin/bash
#
# Startup script for the service
# chkconfig: 2345 80 20
# description: a service

PID_FILE=/var/run/pidfile.pid
LOG_FILE=/var/log/serviceslogs

#Necessary environment variables
export JAVA_HOME="/usr/java/latest" 
#export JAVA_HOME="/root/java-8-oracle"

if test \! -d "${JAVA_HOME}"; then
  echo "$0: the JAVA_HOME exported value is not defined correctly"
  exit 2
fi
# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

start() {
 if [ -e $PID_FILE ]
  then
    checkpid `cat /var/run/pidfile.pid`
    res=$?
    if [ $res -eq 0 ]
    then
      echo "Standalone service is already running!"
      return;
    fi
  fi
  $JAVA_HOME/bin/java blablablablabla > $LOG_FILE 2>&1  &  echo $! > $PID_FILE
      echo $! > $PID_FILE
  echo "Starting Standalone service "
}

stop() {
  echo "Shutting down Standalone service: "
  checkpid `cat /var/run/pidfile.pid`
  res=$?
  if [ $res -eq 0 ]
  then
    kill -9 `cat /var/run/pidfile.pid`
    rm `cat /var/run/pidfile.pid`
    echo "Standalone service stopped."
  else
    echo "Standalone service is not running!"
  fi


}

status() {
  checkpid `cat /var/run/pidfile.pid`
  res=$?
  if [ $res -eq 0 ]
  then
    echo "Standalone service is running."
  else
    echo "Standalone service is stopped."
  fi
}

case "$1" in
    start)
    start
    ;;
     stop)
    stop
    ;;
     restart)
    stop
    start
    ;;
     status)
    status
    ;;
     *)
    echo "Usage: service {start|stop|restart|status}"
     exit 1
esac

А это мой файл .service в / usr / lib / systemd / system:

# Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/service
Description=SYSV: A service
Before=runlevel2.target
Before=runlevel3.target
Before=runlevel4.target
Before=runlevel5.target
Before=shutdown.target
Before=jexec.service
After=network-online.target
After=network.service
After=mysql.service
Conflicts=shutdown.target

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/rc.d/init.d/service start
ExecStop=/etc/rc.d/init.d/service stop

Прыжки кому-нибудь могут помочь. Спасибо.

Проблема решена добавлением PIDFile директива в .service файл.