「古い」RHEL6 SysVスクリプトのスクリプトを「新しい」RHEL7システムスクリプトに調整する必要がありました。 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
しかし、まだ動作しません。スクリプトは永久に「アクティブ」のままで、プロセスは開始されません。
どんなアイデアがありますか?
ご協力ありがとうございます!
良い一日になろう! !
少しねじる
答え1
ついにこの問題を解決する方法を見つけました...
あるスクリプトから2つのサービスを呼び出すのではなく、開始するために別のサービス(Xvfb.service)に依存するlibreoffice-server.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が起動することがわかりました。これが私が探していた解決策です。
より多くの方に役立つことを願って、一週間この解決策を探して迷い、ついに答えを見つけたので、コミュニティに共有します。
良い一日になろう! !
答え2
Libreoffice にはもうモニターは不要です。グラフィカルユーザーインターフェースが不要な場合(だからxvfbは必要ありません)