我正在使用 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