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?

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

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/xvfb@.servicenatü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


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

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.


-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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.