OpenOffice / LibreOffice headless 的 init.d 脚本不会停止进程

OpenOffice / LibreOffice headless 的 init.d 脚本不会停止进程

我正在使用 Ubuntu,并发现了这个用于 LibreOffice headless 的 init.d 脚本。

问题是,当被要求“停止”时,它似乎并没有停止该过程。任何帮助都非常感谢。

另外两个问题:我在其他 init.d 脚本中看到过使用命令 start-stop-daemon - 与此脚本中使用的方法相比,它有什么优势?另外,我希望能够以非特权用户身份运行此脚本,但它说它无法创建 PID 文件。允许非特权用户运行此脚本的“正确”方法是什么?

谢谢!

#!/bin/bash
# libreoffice.org  headless server script
#
# chkconfig: 2345 80 30
# description: headless libreoffice server script
# processname: libreoffice
# 
# Author: Vic Vijayakumar
# Modified by Federico Ch. Tomasczik
# Modified by Manuel Vega Ulloa
OOo_HOME=/usr/bin
SOFFICE_PATH=$OOo_HOME/soffice
PIDFILE=/var/run/libreoffice-server.pid
set -e
case "$1" in
    start)
    if [ -f $PIDFILE ]; then
      echo "LibreOffice headless server has already started."
      sleep 5
      exit
    fi
      echo "Starting LibreOffice headless server"
      $SOFFICE_PATH --headless --nologo --nofirststartwizard --accept="socket,host=127.0.0.1,port=2002;urp" & > /dev/null 2>&1
      touch $PIDFILE
    ;;
    stop)
    if [ -f $PIDFILE ]; then
      echo "Stopping LibreOffice headless server."
      #killall -9 soffice 
      #killall -9 soffice.bin
      killall -9 oosplash
      #start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE  --exec $DAEMON || true

      rm -f $PIDFILE
      exit
    fi
      echo "LibreOffice headless server is not running."
      exit
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
esac
exit 0

答案1

您应该以正确的方式使用 PID 和 PIDFILE。例如(摘自我的工作脚本):

case "$1" in
    start)
    if [ -f $PIDFILE ]; then
      echo "LibreOffice headless server has already started."
      sleep 5
      exit
    fi
      echo "Starting LibreOffice headless server"
      $SOFFICE_PATH --headless --nologo --nofirststartwizard --    accept="socket,host=127.0.0.1,port=2002;urp" & > /dev/null 2>&1
      PID=`ps ax|grep "soffice.bin --headless"|grep -v grep|cut -d \  -f 1`
      echo $PID> $PIDFILE
    ;;
    stop)
    if [ -f $PIDFILE ]; then
      echo "Stopping LibreOffice headless server."
      kill `cat $PIDFILE`
      rm -f $PIDFILE
      exit
    fi
      echo "LibreOffice headless server is not running."
      exit
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
esac

相关内容