Ubuntu 16上的Varnish无法读取-f文件自定义default.vcl

时间:2016-09-07 18:00:22

标签: ubuntu varnish systemd

我刚刚安装了全新安装的Ubuntu 16.04,我无法使用Varnish来处理自定义配置文件,就像我可以使用Ubuntu 14.04一样。

I have read更改为/etc/default/varnish无效,因为它使用systemd而不是init.d。

因此,该流程已更改为编辑/lib/systemd/system/varnish.service

[Unit]
Description=Varnish HTTP accelerator
Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd

[Service]
Type=simple
LimitNOFILE=131072
LimitMEMLOCK=82000
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
ExecReload=/usr/share/varnish/reload-vcl
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true

[Install]
WantedBy=multi-user.target

现在我想将default.vcl与自定义vcl交换(在我正在处理的git存储库中)。所以我将ExecStart中的行更改为-f /home/bozdoz/path/to/default.vcl,重新加载守护程序并重新启动服务后出现以下错误:

>> sudo systemctl status varnish.service
● varnish.service - Varnish HTTP accelerator
   Loaded: loaded (/lib/systemd/system/varnish.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2016-09-07 14:29:58 ADT; 5s ago
     Docs: https://www.varnish-cache.org/docs/4.1/
           man:varnishd
  Process: 7588 ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /home/bozdoz/path/to/default.vcl
 Main PID: 7588 (code=exited, status=2)

Sep 07 14:29:58 bozdoz-dell systemd[1]: Started Varnish HTTP accelerator.
Sep 07 14:29:58 bozdoz-dell varnishd[7588]: Error: Cannot read -f file (/home/bozdoz/path/to/default.vcl)

我尝试将自定义文件的权限更改为varnish或vcache所有,但都没有工作。我试过打开777的权限(仅用于测试目的),但它仍然失败。

另请注意,如果将自定义文件复制到/etc/varnish/default.vcl,则清漆可以正常工作;问题是我希望文件位于git存储库中,但是varnish服务似乎无法访问自定义文件。

如何在systemd的另一个目录中使用自定义文件?

1 个答案:

答案 0 :(得分:1)

我怀疑/home/bozdoz/home/bozdozdefault.vcl之间的一个中间目录上的权限正在为您提供此权限被拒绝错误。

如果我可以提出更一般的建议,那么修改/lib/systemd/system中的服务文件是不好的做法。如果Varnish软件包更新,它可能会覆盖您的更改。相反,您有两种选择:

  1. /lib/systemd/system/varnish.service复制到/etc/systemd/system/varnish.service并在那里进行更改
  2. 创建目录和文件/etc/systemd/system/varnish.service.d/override.conf并在那里应用 delta
  3. override.conf看起来像这样:

    ExecStart=
    ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T localhost:6082 -f /home/bozdoz/path/to/default.vcl -S /etc/varnish/secret -s malloc,256m
    

    第一个语句清除现有的ExecStart指令,第二个语句设置一个新的指令。