"이전" 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
그런 다음 컴퓨터가 부팅될 때 시작되도록 두 개의 스크립트를 활성화했습니다.
$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는 필요하지 않습니다)