用于 LibreOffice 无头服务器的 RHEL6 SysV 到 RHEL7 systemd 脚本

用于 LibreOffice 无头服务器的 RHEL6 SysV 到 RHEL7 systemd 脚本

我必须将脚本从“旧”RHEL6 SysV 脚本调整为“新”RHEL7 systemd 脚本。我可以为 LibreOffice 执行 systemd 脚本,没有问题,但是当我尝试使用 Xvfb(具有 GUI 的用户必须连接到 LibreOffice 服务器并使用它)时,它停止工作并让我头疼。我尝试独立启动它(首先是 .service 中的 Xvfb,然后是 libreoffice),但仍然没有机会......我使其工作的唯一方法是在命令行启动 Xvfb,然后启动 LibreOffice 服务器的 systemd 脚本。我将向您展示我的脚本:

旧的 SysV 脚本:

#!/bin/bash
# openoffice.org headless server script
#
# chkconfig: 2345 80 30
# description: headless openoffice server script
# processname: openoffice
#
# Author: Vic Vijayakumar
# Modified by Federico Ch. Tomasczik
OOo_HOME=/opt/libreoffice5.0/program
SOFFICE_PATH=$OOo_HOME/soffice
PIDFILE=/var/run/openoffice-server.pid

set -e

case "$1" in
start)
if [ -f $PIDFILE ]; then
echo "OpenOffice headless server has already started."
sleep 5
exit
fi
echo "Starting OpenOffice headless server"
Xvfb :1 -screen 0 1024x768x24 & > /dev/null 2>&1
$SOFFICE_PATH --nolockcheck --norestore --nodefault --nologo --nofirststartwizard --accept="socket,host=localhost,port=8085,tcpNoDelay=1;urp" --display :1 & > /dev/null 2>&1
touch $PIDFILE
;;
stop)
if [ -f $PIDFILE ]; then
echo "Stopping OpenOffice headless server."
killall -9 oosplash && killall -9 soffice.bin && killall -9 Xvfb
rm -f $PIDFILE
exit
fi
killall -9 Xvfb
echo "Openoffice headless server is not running."
exit
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

新的 Systemd 脚本:

[Unit]
Description=Headless LibreOffice server script
Documentation=https://fr.libreoffice.org/
DefaultDependencies=no

[Service]
ExecStartPre=Xvfb :1 -screen 0 1024x768x24 -nolisten inet6 & > /dev/null 2>&1
ExecStart=/usr/lib64/libreoffice/program/soffice --headless --nolockcheck --norestore --nodefault '--accept=socket,host=localhost,port=8101,tcpNoDelay=1;urp;' --nofirststartwizard --nologo
Type=oneshot
TimeoutStopSec=5
PIDFile=/var/run/libreoffice-server.pid

[Install]

WantedBy=multi-user.target

然后我发现重定向 (&) 在 systemd 脚本中运行得不太好,所以我制作了一个 bash 脚本并从 systemd 脚本中调用它,如下所示:

...
[Service]
ExecStartPre=/bin/bash /usr/bin/Xvfb_launch.sh
...

还有 Xvfb_launch.sh :

#!/bin/bash

/usr/bin/Xvfb :1 -screen 0 1024x768x24 -nolisten inet6 & > /dev/null 2>&1

但仍然不起作用,脚本永远保持在“激活”状态,并且没有启动任何进程。

有任何想法吗 ?

感谢您的帮助 !

祝你有美好的一天 !!

瑞克

答案1

我终于找到了如何解决这个问题......

我制作了一个 libreoffice-server.service,它依赖于另一项服务(Xvfb.service)来启动,而不是从一个脚本调用这 2 个服务,现在一切正常。如果其他人也有同样的问题,我会给你我的解决方案,他们将能够解决它。

首先我做了 Xvfb.service 文件:

[Unit]
Description=X Virtual Frame Buffer Service
After=network.target
Before=libreoffice-server.service
Documentation=http://x.org
DefaultDependencies=no

[Service]
ExecStart=/usr/bin/Xvfb :1 -screen 0 1024x768x24 -nolisten inet6
Type=simple
TimeoutStopSec=5
PIDFile=/var/run/Xvfb.pid

[Install]
WantedBy=multi-user.target libreoffice-server.service

然后我将 libreoffice-server.service 编辑为如下所示:

[Unit]
Description=Headless LibreOffice server script
After=network.target
Documentation=https://fr.libreoffice.org/
DefaultDependencies=no
Wants=Xvfb.service

[Service]
ExecStart=/usr/lib64/libreoffice/program/soffice --headless --nolockcheck --norestore --nodefault '--accept=socket,host=localhost,port=8101,tcpNoDelay=1;urp;' --nofirststartwizard --nologo --display :1
Type=simple
TimeoutStopSec=5
PIDFile=/var/run/libreoffice-server.pid

[Install]
WantedBy=multi-user.target

然后我启用了两个脚本以在机器启动时启动:

$sudo systemctl enable Xvfb.service
$sudo systemctl enable libreoffice-server.service

现在,当机器启动时,Xvfb.service 在 libreoffice-server.service 之前启动。所以现在一切都很好!

我注意到,如果我停止 Xvfb.service 和 Libreoffice-server.service,然后我从命令行启动 libreoffice-server,它会在启动自己的进程之前启动 Xvfb.service。所以这确实是我一直在寻找的解决方案。

希望它能帮助更多的人,我已经搜索这个解决方案一周了,终于找到了答案,所以我将其分享给社区。

祝你有美好的一天 !!

答案2

Libreoffice 不再需要显示器如果不需要图形用户界面(所以 xvfb 不是必需的)

相关内容