清漆不会作为服务启动,但从命令行工作正常?

我们正在尝试在Cent OS 6.5 64上设置清漆,但是无法将其作为服务来使用。 什么可能是以下错误的原因?

[root@server]# service varnish start Starting Varnish Cache: 0 [FAILED] 

这工作完美,这是在configurationDAEMON_OPTS相同的参数。

 varnishd -a :80 -T localhost:6082 -b localhost:8080 -u varnish -g varnish -s file,/var/lib/varnish/varnish_storage.bin,1G 

我发现了一些关于如何在清漆论坛中进行debugging的信息:

 [root@server]# varnishd -C -f /etc/sysconfig/varnish Message from VCC-compiler: VCL version declaration missing Update your VCL to Version 4 syntax, and add vcl 4.0; on the first line the VCL files. ('input' Line 8 Pos 1) NFILES=131072 ######------- Running VCC-compiler failed, exit 1 VCL compilation failed 

但是我们没有使用任何VCL,为什么它抱怨VCL呢?

清漆configuration文件:

 # Configuration file for varnish # # /etc/init.d/varnish expects the variable $DAEMON_OPTS to be set from this # shell script fragment. # # Maximum number of open files (for ulimit -n) NFILES=131072 # Locked shared memory (for ulimit -l) # Default log size is 82MB + header MEMLOCK=82000 # Maximum number of threads (for ulimit -u) NPROCS="unlimited" # Maximum size of corefile (for ulimit -c). Default in Fedora is 0 # DAEMON_COREFILE_LIMIT="unlimited" # Set this to 1 to make init script reload try to switch vcl without restart. # To make this work, you need to set the following variables # explicit: VARNISH_VCL_CONF, VARNISH_ADMIN_LISTEN_ADDRESS, # VARNISH_ADMIN_LISTEN_PORT, VARNISH_SECRET_FILE, or in short, # use Alternative 3, Advanced configuration, below #RELOAD_VCL=1 # This file contains 4 alternatives, please use only one. ## Alternative 1, Minimal configuration, no VCL # # Listen on port 6081, administration on localhost:6082, and forward to # content server on localhost:8080. Use a fixed-size cache file. # DAEMON_OPTS="-a :80 -T localhost:6082 -b localhost:8080 -u varnish -g varnish -s file,/var/lib/varnish/varnish_storage.bin,1G" ## Alternative 2, Configuration with VCL # # Listen on port 6081, administration on localhost:6082, and forward to # one content server selected by the vcl file, based on the request. Use a # fixed-size cache file. # # DAEMON_OPTS="-a :80 -T localhost:6699 -f /etc/varnish/default.vcl -u varnish -g varnish -S /etc/varnish/secret -s malloc,1G" ## Alternative 3, Advanced configuration # # See varnishd(1) for more information. # # # Main configuration file. You probably want to change it :) #VARNISH_VCL_CONF=/etc/varnish/default.vcl # # # Default address and port to bind to # # Blank address means all IPv4 and IPv6 interfaces, otherwise specify # # a host name, an IPv4 dotted quad, or an IPv6 address in brackets. # VARNISH_LISTEN_ADDRESS= #VARNISH_LISTEN_PORT=80 # # # Telnet admin interface listen address and port #VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 #VARNISH_ADMIN_LISTEN_PORT=6082 # # # Shared secret file for admin interface #VARNISH_SECRET_FILE=/etc/varnish/secret # # # The minimum number of worker threads to start #VARNISH_MIN_THREADS=50 # # # The Maximum number of worker threads to start #VARNISH_MAX_THREADS=1000 # # # Idle timeout for worker threads #VARNISH_THREAD_TIMEOUT=120 # # # Cache file size: in bytes, optionally using k / M / G / T suffix, # # or in percentage of available disk space using the % suffix. #VARNISH_STORAGE_SIZE=256M # # # Backend storage specification #VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}" # # # Default TTL used when the backend does not specify one VARNISH_TTL=120 # # # DAEMON_OPTS is used by the init script. If you add or remove options, make # # sure you update this section, too. #DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \ # -f ${VARNISH_VCL_CONF} \ # -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \ # -t ${VARNISH_TTL} \ # -p thread_pool_min=${VARNISH_MIN_THREADS} \ # -p thread_pool_max=${VARNISH_MAX_THREADS} \ # -p thread_pool_timeout=${VARNISH_THREAD_TIMEOUT} \ # -u varnish -g varnish \ # -S ${VARNISH_SECRET_FILE} \ # -s ${VARNISH_STORAGE}" # ## Alternative 4, Do It Yourself. See varnishd(1) for more information. # # DAEMON_OPTS="" 

注意: /var/log/varnish也是空的,没有提供线索。

更新:

 [root@server]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 54665 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 54665 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited 

更新2:

如果我这样做,清漆开始:

 bash -x /etc/init.d/varnish start 

但不是

 /etc/init.d/varnish start 

是什么造成了差异?

我遇到了同样的问题,我find了原因。

它是由SELinux引起的,你可以使用echo 0 >/selinux/enforce临时禁用它,但是这不是build议的,你应该创build一个策略文件让它运行。 有空的时候我可能会回来的。

执行bash -x /etc/init.d/varnish restart以查找varnish真正尝试启动的选项,然后尝试在cli上运行它们。

假设你没有改变你的init.dVarnish脚本(试试md5吧)

 [root@6svprx01 ~]# head -1 /etc/init.d/varnish #! /bin/sh [root@6svprx01 ~]# rpm -q varnish varnish-3.0.6-1.el5.centos.x86_64 [root@6svprx01 ~]# md5sum /etc/init.d/varnish a69b3b55a8d5da5b9b9c24a62774aa80 /etc/init.d/varnish [root@6svprx01 ~]# service varnish Usage: /etc/init.d/varnish {start|stop|status|restart|condrestart|try-restart|reload|force-reload} [root@6svprx01 ~]# service varnish status varnishd (pid 6188) is running... [root@6svprx01 ~]# 

也:

varnishd -C -f /etc/sysconfig/varnish

是不正确的,它应该是:

varnishd -C -f /etc/varnish/default.vcl