2011-05-06 17 views
5

Używając wbudowanego C z lakierem, nie byłem w stanie uzyskać/etc/varnish/default
, aby być szczęśliwym przy uruchamianiu.DEMONTOWANE OPCJE Opcje DAEMON_OPTS Błędy

Przetestowałem liniowo C z lakierem na dwie rzeczy: wykrywanie GeoIP i funkcje Skrobanie przed witryną.

DAEMON_OPTS zawsze narzeka, mimo że podążam za tym, co inne, wydaje mi się,
wskazać, że działa dobrze.

Moim problemem jest to, że ta linia poleceń uruchomić prace:

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' 

ale błędy Out With próbuje uruchomić skryptów startowych domyślnie:

/etc/default/lakier ma tego w nim :

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'" 

błąd jest:

# /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". 

Gdy próbuję zmienić ostatni wiersz:

-p cc_command='exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'" 

To błąd jest teraz:

# /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" 

on próbuje interpretować '-shared' jako -s hared i 'hared' nie jest typ składowania.

Zarówno dla GeoIP, jak i Anti-Site-Scrape użyłem dokładnie zalecanych opcji demona
plus próbowałem różnych odmian, takich jak dodawanie \ 'i' ', ale bez radości.

Oto link do instrukcji, którą śledziłem, działa dobrze, z wyjątkiem części DAEMON_OPTS.
http://drcarter.info/2010/04/how-fighting-against-scraping-using-varnish-vcl-inline-c-memcached/

Używam Debiana i dokładnych DAEMON_OPTS zgodnie z instrukcjami.

Czy ktoś może pomóc, wskazując na to, co dzieje się tutaj?

Wielkie dzięki!

Odpowiedz

0

Oczywiście twój skrypt startowy interpretujący DAEMON_OPTS nie jest przygotowany na białe znaki (nawet w obrębie pojedynczych cudzysłowów). Przy mojej instalacji Fedory (15) sugerowane rozwiązanie działa dobrze; argumenty zostaną poprawnie zinterpretowane, ponieważ parametr bash "$*" jest przekazywany w /etc/init.d/varnish oraz w /etc/init.d/functions w daemon().

Czy otrzymałeś skrypty startowe z pakietu lub zrobiłeś niestandardowe skrypty?

9

Nawet jeśli Jacob prawdopodobnie nigdy tego nie przeczyta, goście z przyszłości mogą docenić to, co zamierzam napisać.

Wierzę, że wiem, co jest nie tak i wygląda na problem specyficzny dla Debiana, przynajmniej zweryfikowany na Ubuntu 11.04 i Debian Squeeze.

Prześledziłem wykonanie z mojego /etc/default/varnish, które zawiera $DAEMON_OPTS do skryptu init. W skrypcie /etc/init.d/varnish funkcja start_varnishd() jest:

 
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 
} 

Więc zmodyfikowano go wydrukować pełną start-stop-daemon wiersza poleceń, takich jak:

 
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 

Więc mam wiersz polecenia echem na standardowe wyjście, i skopiowałem je do mojej skorupy. I niespodzianka! Zadziałało. WTF?

Powtórzył ponownie, aby się upewnić. Tak to działa. Mmh. Czy może to być kolejna z tych narożnych bash/dash? Spróbujmy karmienia wiersza poleceń start-stop-daemon do bash i zobacz jak reaguje:

 
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 
} 

Tak, to działa dobrze, przynajmniej w moim przypadku. Oto odpowiednia część mojego /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'" 
... 

Widziałem posty gdzie ktoś próbował obejść ten problem, przenosząc polecenia kompilacji w wydzielonej skrypcie. Niestety, nie zmienia to faktu, że start-stop-daemon przejdzie przez $DAEMON_OPTS var przez dash, a to spowoduje zmasakrowane opcje.

byłoby coś wzdłuż linii:

 
-p 'cc_command=exec /etc/varnish/compile.sh %o %s'" 

a następnie compile.sh skrypt jako:

 
#!/bin/sh 
cc -fpic -shared -Wl,-x -L/usr/include/GeoIP.h -lGeoIP -o [email protected] 

ale to nie działa, więc po prostu załatać swoje skrypty startowe, a ty” dobrze iść! Mam nadzieję, że informacje te będą przydatne.

+0

Może istnieć specjalna składnia lub obejście, aby działało to również na desce rozdzielczej. Niestety, nie wiem zbyt wiele o dash. – cosimo

+0

Może to przyjrzeć? http: // stackoverflow.com/questions/1661193/start-stop-daemon-quoted-arguments-misinterpreted – nicomen

+1

Muszę powiedzieć, że nie zrozumiałem, jakie jest proponowane rozwiązanie na końcu tej historii ...: - | – cosimo

0

Nie jest to bezpośrednio związane z pytaniem, ale możesz znaleźć się tutaj, jeśli pracujesz przez Varnish Tutorial - Put Varnish on port 80.

W przypadku ostatnich instalacji systemu Varnish w systemie Debian, konfiguracja opcji uruchamiania varnishd znajduje się pod adresem /etc/systemd/system/multi-user.target.wants/varnish.service. Udokumentowany sposób zmiany portu przez /etc/default/varnish nadal istnieje, ale nie jest już funkcjonalny, chyba że zmienisz system, aby używać skryptów init, a nie systemd.

Po zmianie opcji w /etc/systemd/system/multi-user.target.wants/varnish.service, nie zapomnij uruchomić systemctl daemon-reload, która będzie katalogować zmiany do wykonania programu.

0

Można spróbować użyć: - DAEMON_OPTS = "- do: 8080 \ -T localhost: 2000 \ -f /etc/varnish/varnish-default.conf \ pliku -s/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' "