现在,systemd 给出了答案。

现在,systemd 给出了答案。

我正在跟进本教程,我想知道这个特定于 ubuntu 的步骤的等效 centos 版本:

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

在 centos 启动时启动 xvfb 的正确方法是什么?

答案1

我使用以下初始化脚本在启动时添加并启动 xvfb,只需在 /etc/init.d/ 中输入该脚本并运行 chkconfig xvfb 即可

   #!/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

答案2

现在,systemd 给出了答案。

这些问题和答案问世已经快四年了,世界已经变了,而这些问题却没有变。从版本 7 开始,CentOS 就使用了 systemd。问题和评论中提到了 Ubuntu。从版本 15 开始,Ubuntu 也使用了 systemd。

尽管可以在 systemd 下使用 System 5rc脚本,但这里答案中的脚本至少可以说非常不理想。一个是随意使用killall,其守护进程管理问题众所周知;另一个是一堆摇摇欲坠的锁文件和 PID 文件逻辑没有任何在服务经理的领导下,这实际上是必要的,因为服务经理他们自己跟踪守护进程。

正如我在其他地方所说的那样,如果您开始学习这些内容并且使用的是 CentOS Linux 版本 7 或更高版本或 Ubuntu Linux 版本 15 或更高版本,那么rc首先不要从 System 5 脚本开始。从 systemd 单元文件开始。

多个 Xvfb 服务的模板

xvfb.service可以在以下位置找到 xvfb 的简单systemd 单元文件https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363以及https://askubuntu.com/a/621256/43344。但是,正如我在后者中提到的,也可以采用模板化的方法:

[单元]
描述=用于显示 %I 的虚拟帧缓冲区 X 服务器
之后=网络.目标

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

[安装]
WantedBy=多用户.目标

作为本地编写的、非系统非打包的、用于系统范围(而不是每个用户)服务的单元文件,这当然是可行的。/etc/systemd/system/[email protected]

控制服务

将模板实例化为实际命名的服务,并指定所需的显示编号。:99因此,对于显示,有一个名为的实际服务实例xvfb@:99.service

  • 使用 将服务设置为在引导时自动启动systemctl enable xvfb@:99.service
  • 使用 取消设置自动启动服务systemctl disable xvfb@:99.service
  • 使用 手动启动服务systemctl start xvfb@:99.service
  • 使用 手动停止服务systemctl stop xvfb@:99.service
  • 使用 详细检查当前服务状态systemctl status xvfb@:99.service

进一步阅读

答案3

这是一个不错的初始化脚本,可以实现这个功能:

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

脚本如下:

#!/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

将脚本保存为 xvfbd 并将脚本复制到/etc/init.d,然后运行以下命令:

sudo chkconfig --add xvfbd

答案4

如果您只需要在计算机启动时启动或运行某些程序,则可以使用更简单的方法。

在 Redhat/CentOS 上,在此文件中添加脚本行:/etc/rc.d/rc.local

相关内容