用於 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
新的系統腳本:
[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。所以這確實是我一直在尋找的解決方案。
希望它會幫助更多的人,我已經搜尋了一個星期的這個解決方案,我終於找到了我的答案,所以我將它分享給社區。
祝你有美好的一天 !!