- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当使用内联 C 和 Varnish 时,我无法获取/etc/varnish/default
在启动时感到高兴。
我已经用 varnish 测试了内联 C 的两件事:GeoIP 检测和反站点抓取功能。
即使我遵循其他看起来的内容,DAEMON_OPTS 总是提示
表明工作正常。
我的问题是这个命令行启动有效:
varnishd -f /etc/varnish/varnish-default.conf -s file,/var/lib/varnish/varnish_storage.bin,512M -T 127.0.0.1:2000 -a 0.0.0.0:8080 -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'
但是尝试从默认启动脚本启动时出错:
/etc/default/varnish 中有这样的内容:
DAEMON_OPTS="-a :8080 \
-T localhost:2000 \
-f /etc/varnish/varnish-default.conf \
-s file,/var/lib/varnish/varnish_storage.bin,512M \
-p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'"
错误是:
# /etc/init.d/varnish start
Starting HTTP accelerator: varnishd failed!
storage_file: filename: /var/lib/varnish/vbox.local/varnish_storage.bin size 512 MB.
Error:
Unknown parameter "'cc_command".
如果我尝试将最后一行更改为:
-p cc_command='exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'"
现在的错误是:
# /etc/init.d/varnish start
Starting HTTP accelerator: varnishd failed!
storage_file: filename: /var/lib/varnish/vbox.local/varnish_storage.bin size 512 MB.
Error: Unknown storage method "hared"
它试图将“-shared”解释为 -s hared,而“hared”不是存储类型。
对于 GeoIP 和 Anti-Site-Scrape,我已经使用了推荐的确切守护进程选项
plus 尝试了各种变体,例如添加 ' 和 '' 但没有任何乐趣。
这是我遵循的说明的链接,除了 DAEMON_OPTS 部分之外,该说明工作正常。
http://drcarter.info/2010/04/how-fighting-against-scraping-using-varnish-vcl-inline-c-memcached/
我正在使用 Debian 和说明中所述的确切 DAEMON_OPTS。
任何人都可以帮忙指出这里出了什么问题吗?
最佳答案
即使雅各布可能永远不会读到这篇文章,来自 future 的访客可能会欣赏我将要写的内容。
我相信我知道出了什么问题,而且它看起来像是 Debian 特有的问题,至少在 Ubuntu 11.04 和 Debian Squeeze 上得到了验证。
我跟踪了从包含 $DAEMON_OPTS
的 /etc/default/varnish
到 init 脚本的执行情况。在初始化脚本/etc/init.d/varnish
中,start_varnishd()
函数为:
start_varnishd() { log_daemon_msg "Starting $DESC" "$NAME" output=$(/bin/tempfile -s.varnish) if start-stop-daemon \ --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \ -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1; then log_end_msg 0 else log_end_msg 1 cat $output exit 1 fi rm $output}
所以我修改了它以打印完整的 start-stop-daemon
命令行,例如:
start_varnishd() { log_daemon_msg "Starting $DESC" "$NAME" output=$(/bin/tempfile -s.varnish)+ echo "start-stop-daemon --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1" if start-stop-daemon \ --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \ -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1; then log_end_msg 0
所以我在 STDOUT 上得到了一条命令行回显,并将其复制粘贴到我的 shell 中。而且,惊喜!有效。 什么鬼?
再次重复以确定。是的,它有效。嗯。这可能是另一个 bash/dash 极端情况吗?让我们尝试将 start-stop-daemon 命令行输入到 bash
,看看它的 react 如何:
start_varnishd() { log_daemon_msg "Starting $DESC" "$NAME" output=$(/bin/tempfile -s.varnish) if bash -c "start-stop-daemon \ --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \ -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1"; then log_end_msg 0 else log_end_msg 1 cat $output exit 1 fi rm $output}
是的,它工作得很好,至少对于我来说是这样。这是我的 /etc/default/varnish
的相关部分:
...## 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 1GB# fixed-size cache file.#DAEMON_OPTS="-a :6081 \ -T localhost:6082 \ -f /etc/varnish/geoip-example.vcl \ -S /etc/varnish/secret \ -s malloc,100M \ -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/GeoIP.h -lGeoIP -o %o %s'"...
我见过有人试图通过将编译命令移动到单独的 shell 脚本中来解决这个问题的帖子。不幸的是,这并没有改变 start-stop-daemon
将通过 dash
传递 $DAEMON_OPTS
var 的事实,这将导致在损坏的选项中。
大概是这样的:
-p 'cc_command=exec /etc/varnish/compile.sh %o %s'"
然后 compile.sh
脚本如下:
#!/bin/shcc -fpic -shared -Wl,-x -L/usr/include/GeoIP.h -lGeoIP -o $@
但它不起作用,所以只需修补你的初始化脚本,然后就可以开始了!希望您会发现此信息有用。
关于daemon - Varnish DAEMON_OPTS 选项错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906603/
在前台程序上运行 valgrind 很容易。但是 valgrind 会为守护程序工作并在执行后给出输出。我该怎么做? 谢谢 最佳答案 是的,valgrind 肯定适用于守护程序。 许多守护进程都有某种
网络上有很多守护进程的示例实现。我看到的大多数不使用 daemon(3) 函数在后台运行程序。这只是品味、无知的问题,还是有充分的理由编写我自己的 daemonize 函数?使用 daemon(3)
我使用 apache commons 示例代码编写了一个守护进程: public class LockDaemon implements Daemon { @Override public void
docker出现cannot connect to the docker daemon. is the docker daemon running on this host错误解决办法 发生现象:
我正在使用 Ruby Daemon-kit 设置一个服务,为我的 Rails 应用程序执行各种后台操作。 当我在命令行上调用时它工作正常: ./bin/bgservice 我如何为它创建一个守护进程
当我尝试使用命令'react-native run-android'构建项目时,出现以下错误: 错误:无法找到或加载主类“Dorg.gradle.daemon = true” JS server al
我正在尝试从以下位置安装 memcached:http://blog.elijaa.org/index.php?post/2010/10/15/Memcached-for-Windows&simila
我使用 Xcode 创建了一个命令行工具应用程序。在那个应用程序中,我使用 NSWorkspace 来启动另一个应用程序包 (.app),如此处建议的那样。 MacOsX: How to launch
我正在尝试在一些Ubuntu 14.04流浪者盒子上使用consul设置docker swarm,但是docker守护程序存在问题。我已经在运行progrium / consul容器和swarm ma
我把android studio升级到3.2.0,并创建了默认项目。但是编译器报错: Android resource linking failed Output: D:\android1\proj
首先 - 我知道 UWSGI 建议使用 smart-attach-daemon 来自:http://uwsgi-docs.readthedocs.io/en/latest/AttachingDaemo
2018/09/27 我把android studio升级到3.2.0,并创建了默认项目。但是编译器报错: Android resource compilation failed Output: C
错误: Error 1 "bin\Debug\Daemon.exe.manifest;bin\Release\Daemon.exe.manifest" is an invalid value fo
尝试构建 Android 应用程序时出现此错误: > A failure occurred while executing com.android.build.gradle.internal.task
我已经从源码包安装了mysql-5.6.14 尝试开始: vaio1@vaio1-VPCEA3S1E:mysqld 2013-11-17 13:22:18 0 [Warning] Using uni
我知道一些(全部?)守护进程在启动时会 fork 。我的印象是,这是将子进程作为特权较低的用户运行,特别是如果守护进程类似于 HTTP 服务器。 为什么这是必要的?如果不 fork 子进程,进程就不能
我目前正在开发一个守护进程,它将执行很多不同的任务。它是多线程的,并且正在构建以处理几乎任何类型的内部错误而不会崩溃。好吧,我正在处理关闭请求,但我不确定我应该如何去做。 我有一个关闭 Hook 设置
Windows Server的Docker Windows Server 1709版,带有容器 Docker版本17.06.2-ee-6,构建e75fdb8 群集模式(工作程序节点,具有Ubuntu母
使用截至2017年8月25日的最新版本的Docker,我知道Docker不再需要VirtualBox安装程序以及boot2docker才能正常工作。但是,在尝试连接到它并使用docker-compos
是否使用 C 函数 daemon()与使用 fork()、setsid()、umask()、 等显式函数(除了无法设置所有守护进程参数之外)相比,Linux 守护进程在安全性或稳定性方面有任何劣势吗?
我是一名优秀的程序员,十分优秀!