Richtiger Weg, um xvfb beim Start auf Centos zu starten?

11

Ich folge diesem Tutorial und möchte die entsprechende Centos-Version dieses Ubuntu-spezifischen Schritts kennen:

You may receive a few warnings regarding fonts and such, but it’ll still work despite these. If you want the framebuffer to start automatically on system startup you can do:
sudo update-rc.d xvfb defaults 10

Was ist der richtige Weg, um xvfb beim Start auf Centos zu starten?

Stefan Kendall
quelle

Antworten:

12

Ich benutze das folgende Init-Skript, um xvfb beim Booten hinzuzufügen und zu starten. Blat das einfach in /etc/init.d/ und starte chkconfig xvfb auf

   #!/bin/bash
   #chkconfig: 345 95 50
   #description: Starts xvfb on display 99
   if [ -z "$1" ]; then
   echo "`basename $0` {start|stop}"
       exit
   fi

   case "$1" in
   start)
       /usr/bin/Xvfb :99 -screen 0 1280x1024x24 &
   ;;

   stop)
       killall Xvfb
   ;;
   esac
Tacticus
quelle
1
Vergessen Sie nicht, dieser Datei die Ausführungsberechtigung hinzuzufügen: chmod + x xvfb
panchicore
2
Obwohl seine Frage für CentOS gestellt wurde, ist sie auch für andere Distributionen nützlich geworden. Dies funktioniert gut unter Ubuntu; Sie müssen nur update-rc.dstatt laufen chkconfig. Weitere Informationen finden Sie in dieser Antwortupdate-rc.d .
Sigpwned
1
Die Frage war, wie es unter CentOS geht. Das aktuelle CentOS verwendet systemd, und diese Antwort löst die Frage nicht. Die Antwort von JdeBP ist angemessener.
Yoichi
In Anbetracht der Frage wurde vor 6 Jahren gestellt, als die aktuelle Version von Centos nicht existierte (noch systemd iirc). Die systemd-Lösung ist jedoch viel besser und sollte nach Möglichkeit die bevorzugte Option sein.
Tacticus
19

Und jetzt antwortet das System.

Seit diesen Fragen und Antworten sind fast vier Jahre vergangen, und die Welt hat sich verändert, obwohl dies nicht der Fall ist. Seit Version 7 verwendet CentOS systemd. Ubuntu wird in der Frage und in den Kommentaren erwähnt. Seit Version 15 verwendet Ubuntu auch systemd.

Obwohl man System 5- rcSkripte unter systemd verwenden kann, sind die Skripte in den Antworten hier, gelinde gesagt, höchst suboptimal. Man verwendet killallmunter, dessen Probleme für das Dæmon-Management bekannt sind; und das andere ist ein Durcheinander von wackeliger Sperrdatei und PID- Dateilogik, von denen keine unter einem Service-Manager tatsächlich notwendig ist, da Service-Manager selbst die Dæmon-Prozesse verfolgen.

Wie ich bereits an anderer Stelle gesagt habe, sollten Sie nicht mit System 5- rcSkripten beginnen, wenn Sie anfangen, dieses Zeug zu lernen und CentOS Linux Version 7 oder höher oder Ubuntu Linux Version 15 oder höher verwenden . Beginnen Sie mit systemd unit files.

eine Vorlage für mehrere Xvfb-Dienste

Einfache xvfb.serviceSystemd Unit-Dateien für xvfb finden Sie unter https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363 und unter /ubuntu//a/621256/43344 . Wie ich bereits erwähnt habe, kann man jedoch auch einen templatisierten Ansatz verfolgen:

[Einheit]
Beschreibung = virtueller Frame Buffer X-Server für Anzeige% I.
Nach = network.target

[Bedienung]
ExecStart = / usr / bin / Xvfb% I -screen 0 1280x1024x24

[Installieren]
WantedBy = multi-user.target

Als lokal geschriebene, nicht systemgebundene, nicht gepackte Einheitendatei für systemweite Dienste (im Gegensatz zu Diensten pro Benutzer) wird dies /etc/systemd/system/[email protected]natürlich berücksichtigt.

Kontrolle der Dienstleistungen

Man instanziiert die Vorlage in einen tatsächlich benannten Dienst mit der gewünschten Anzeigenummer. Zur Anzeige :99gibt es daher eine tatsächliche Dienstinstanz mit dem Namen xvfb@:99.service.

  • Stellen Sie den Dienst so ein, dass er beim Bootstrap mit automatisch startet systemctl enable xvfb@:99.service.
  • Deaktivieren Sie das automatische Starten des Dienstes mit systemctl disable xvfb@:99.service.
  • Starten Sie den Dienst manuell mit systemctl start xvfb@:99.service.
  • Beenden Sie den Dienst manuell mit systemctl stop xvfb@:99.service.
  • Überprüfen Sie den aktuellen Servicestatus im Detail mit systemctl status xvfb@:99.service.

Weiterführende Literatur

JdeBP
quelle
Der Link für "Hinzufügen von xvfb zu Systemdiensten" ist tot.
Manish
Die SuperUser-Frage, auf die verwiesen wird, wurde inzwischen automatisch gelöscht. Glücklicherweise hat der Fragesteller es mehrfach gepostet. ☺
JdeBP
4

Hier ist ein nettes Init-Skript, um dies zu erreichen:

http://onemoretech.wordpress.com/2009/05/27/an-xvfb-init-script/

Das Skript lautet:

#!/bin/bash
#
# /etc/rc.d/init.d/xvfbd
#
# chkconfig: 345 95 28
# description: Starts/Stops X Virtual Framebuffer server
# processname: Xvfb
#

. /etc/init.d/functions

[ "${NETWORKING}" = "no" ] && exit 0

PROG="/usr/X11R6/bin/Xvfb"
PROG_OPTIONS=":5 -screen 0 640x480x24"
PROG_OUTPUT="/tmp/Xvfb.out"

case "$1" in
    start)
        echo -n "Starting : X Virtual Frame Buffer "
        $PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &
        disown -ar
        /bin/usleep 500000
        status Xvfb & >/dev/null && echo_success || echo_failure
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
            /bin/touch /var/lock/subsys/Xvfb
            /sbin/pidof -o  %PPID -x Xvfb > /var/run/Xvfb.pid
        fi
        echo
        ;;
    stop)
        echo -n "Shutting down : X Virtual Frame Buffer"
        killproc $PROG
        RETVAL=$?
        [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb
 /var/run/Xvfb.pid
        echo
        ;;
    restart|reload)
        $0 stop
        $0 start
        RETVAL=$?
        ;;
    status)
        status Xvfb
        RETVAL=$?
        ;;
    *)
     echo $"Usage: $0 (start|stop|restart|reload|status)"
     exit 1
esac

exit $RETVAL

Speichern Sie das Skript als xvfbd, kopieren Sie das Skript nach /etc/init.dund führen Sie den folgenden Befehl aus:

sudo chkconfig --add xvfbd
Thilo
quelle
1

Am einfachsten ist es, die folgende Zeile in die /etc/rc.localDatei einzufügen (erstellen Sie eine, wenn sie nicht vorhanden ist):

Xvfb :0 -screen 0 1024x768x16 &

um den virtuellen X-Framebuffer beim Booten zu starten.

Kenorb
quelle
-2

Sie können eine einfachere Methode verwenden, wenn Sie nur etwas auf dem Computer starten oder starten müssen.

Fügen Sie unter Redhat / CentOS Ihre Skriptzeile zu dieser Datei hinzu: /etc/rc.d/rc.local

tryp
quelle
Ich habe Sie nicht abgelehnt, aber ich denke, das hat nur für System V funktioniert.
Donato
Ich habe dies heute auf einem Vanilla CentOS 7-System versucht (weil ich faul bin), und es hat funktioniert und Xvfb gestartet.
Clusterdude