Answers:
我使用以下初始化脚本在启动时添加并启动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
自从这些问题和答案以来已经快四年了,世界已经改变,而没有改变。从版本7开始,CentOS使用systemd。问题和评论中都提到了Ubuntu。从版本15开始,Ubuntu也使用systemd。
尽管可以rc
在systemd下使用System 5 脚本,但至少可以这样说,答案中的脚本是次优的。一个善于利用的人killall
,其恶魔管理问题众所周知。另一种是摇摇晃晃的锁文件和PID文件逻辑一塌糊涂没有这是一个服务管理器下确有必要的,因为服务经理自己跟踪守护进程的。
就像我在其他地方说过的,如果您开始学习这些知识并且在CentOS Linux版本7或更高版本或Ubuntu Linux版本15或更高版本上使用,则不要一开始就使用System 5 rc
脚本。从系统单位文件开始。
xvfb.service
可以在https://www.centos.org/forums/viewtopic.php?f=48&t=49080#p208363和https://askubuntu.com/a/621256/43344上找到用于xvfb的简单systemd单位文件。但是,正如我在后一种情况中提到的那样,也可以采用模板化方法:
[单元] Description =用于显示%I的虚拟帧缓冲区X服务器 之后= network.target [服务] ExecStart = / usr / bin / Xvfb%I-屏幕0 1280x1024x24 [安装] WantedBy =多用户目标
作为用于系统范围(而不是针对每个用户)服务的本地编写的,非系统,非打包的单位文件,这/etc/systemd/system/xvfb@.service
当然可以解决。
可以使用所需的显示编号将模板实例化为实际的命名服务。: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
。systemctl
。系统手册页。freedesktop.org。这是一个不错的初始化脚本来完成此任务:
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
如果您只需要在计算机启动时启动或启动某些程序,则可以使用更简单的方法。
在Redhat / CentOS上,在此文件上添加脚本行: /etc/rc.d/rc.local