Назад | Перейти на главную страницу

Varnish не запускается как служба, но отлично работает из командной строки?

Мы пытаемся установить лак на Cent OS 6.5 64, но не можем заставить его работать как услугу. В чем может быть причина следующей ошибки?

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

Это работает отлично, это те же аргументы, что и в DAEMON_OPTS в config.

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

Я нашел информацию о том, как отлаживать в лак форум что дает мне это:

[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 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

В чем разница?

Я столкнулся с той же проблемой, я нашел причину.

Это вызвано SELinux, вы можете временно отключить его с помощью echo 0 >/selinux/enforce но это не рекомендуется, и вам следует создать файл политики для его запуска. Я могу вернуться к этому, когда у меня будет свободное время.

Выполнить bash -x /etc/init.d/varnish restart выяснить, с какими опциями лак действительно пытается запустить, а затем попробовать запустить их на cli.

предполагая, что ты сделал НЕ измените свой init.dс Varnish скрипт (попробуйте md5 it)

[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

У меня была аналогичная проблема, и я обнаружил, что с Ubuntu (я знаю, что это CentOs, но я думаю, что это может быть полезно), мне нужно было настроить, как служба запускается в /etc/systemd/system/varnish.service.d/override.conf как показано ниже:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,1024m

Это было вместо настройки конфигураций демона /etc/default/varnish что просто не сработало для меня.