Rhel

用於 LibreOffice 無頭伺服器的 RHEL6 SysV 到 RHEL7 systemd 腳本

  • July 23, 2020

我不得不將腳本從“舊”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

新的系統腳本:

[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

但仍然無法正常工作,腳本永遠停留在“啟動”上,並且沒有啟動任何程序。

有任何想法嗎 ?

感謝您的幫助 !

祝你有美好的一天 !!

瑞克

我終於找到了解決這個問題的方法……

我創建了一個 libreoffice-server.service,它依賴於另一個服務(Xvfb.service)來啟動,而不是從一個腳本呼叫這兩個服務,現在一切正常。如果其他人有同樣的問題,他們將能夠解決它,我會給你我的解決方案。

首先我做了 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

然後我啟用了 2 個腳本以在機器啟動時啟動:

$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。所以這確實是我一直在尋找的解決方案。

希望它會幫助更多的人,我已經搜尋了一個星期的這個解決方案,我終於找到了我的答案,所以我將它分享給社區。

祝你有美好的一天 !!

引用自:https://unix.stackexchange.com/questions/567452