Можно ли уточнить то, как Вы настроили gzip? Например, Вы используете mod_deflate? Можно ли отправить отрывки от httpd.conf, особенно поле AddOutputFilterByType? Я следовал за этими направлениями для своего конкретного поставщика услуг хостинга, и возможно, что текст/CSS не находится в списке в Вашем поставщике услуг хостинга:
http://kb.mediatemple.net/questions/1567/Compressing+web+pages+with+mod_deflate
Мне похоже, что существует ошибка в строке 91 из/etc/hosts.deny или/etc/cron.daily/logrotate.
Удостоверьтесь, что записи в hosts.deny отформатированы законно.
Моя ставка - то, что где-нибудь существует a sh
сценарий с двойным знаком "равно" (" == ") в a test
команда вместо единственной (" = "). Встроенный Bash test
позволяет ==
или =
, но Оболочка Bourne (по крайней мере, dash
на Ubuntu), только позволяет =
. Кроме того, мой /usr/bin/test
только позволяет равный сингл. Но посмотрите нижнюю часть этого ответа для других примеров, которые производят эту ту же ошибку.
Я заглянул бы logrotate.conf
и посмотрите, имеет ли это строку 91, который мог бы иметь ту проблему.
Если по некоторым причинам Вы хотите воссоздать сообщение об ошибке для тестирования:
Создайте файл, давайте назовем его "a" со следующим содержанием:
echo 'In script "a"'
f="/etc/hosts.deny"
test $f == "foo"
Теперь сделайте:
sh a
Необходимо добраться:
In script "a"
test: 3: /etc/hosts.deny: unexpected operator
Можно также воспроизвести подобную ошибку с помощью любого следующего:
sh -c "test /etc/hosts.deny +"
sh -c "test /etc/hosts.deny -"
sh -c "test /etc/hosts.deny /"
sh -c "test /etc/hosts.deny *"
Править: Попробуйте следующее для сужения поиска:
$ su -
$ find /etc -type f | xargs awk 'FNR==91 && /test/ {print FILENAME, $0}'
Вы будете su
для укоренения затем работайте find
/awk
команда. Это покажет Вам имена файлов и строку 91 из файла, если слово "тест" появится на той строке для каждого файла под /etc
. Затем можно искать операторы, которые являются неправильными.
/etc
в эти find
команда к /
– Paused until further notice.
5 October 2009 в 08:08
find / -type f -print0 | xargs -0 awk 'FNR==91 && /test/ {print FILENAME, [110]}'
– Paused until further notice.
5 October 2009 в 08:19
find / -type f -print0 | xargs -0 awk 'FNR==91 && /test/ {print FILENAME, [110]} FNR==92 {exit}'
– Paused until further notice.
5 October 2009 в 08:33
/etd/logrotate.d/denyhosts очень коротко и, кажется, мне не использует тест:
/var/log/denyhosts {
create 0640 root root
missingok
weekly
rotate 7
compress
postrotate
/etc/init.d/denyhosts restart > /dev/null
endscript
}
Единственный экземпляр "теста" на строке 91 из файла в / и т.д. находится в несвязанном файле.
cron.daily/logrotate задание указывает на/usr/sbin/logrotate (двоичный файл) - если ошибка там, где я мог проверить исходный код?
Только для исправности можно хотеть использовать:
foo:~# which test
/usr/bin/test
видеть, что тестовая программа - то, что Вы думаете, что это. Один метод безопасного программирования должен использовать полный путь для команд в заданиях крона. Это гарантирует, что надлежащий двоичный файл называют и препятствует тому, чтобы взломщик заменил другой столь же именованной командой ранее в Вашем ПУТИ.
/etc/logrotate.d/denyhosts очень коротко и, кажется, мне не использует тест:
Да, но это имеет это:
postrotate
/etc/init.d/denyhosts restart > /dev/null
endscript
и тот сценарий действительно наполняет как
HOSTS_DENY=$(grep ^HOSTS_DENY $CONFIG | cut -d = -f 2)
test -e $HOSTS_DENY || touch $HOSTS_DENY
принятие сценария корректно, если бы я должен был предположить, что сказал бы, что Ваша строка HOSTS_DENY в Вашем файле конфигурации уродлива так или иначе.
К счастью, мы не должны предполагать, эта команда покажет Вам точно, куда ошибка прибывает из:
/bin/sh -x /etc/init.d/denyhosts restart
Вот некоторые советы по устранению неисправностей. Я думаю, что Justin абсолютно на правильном пути. Проблема находится, вероятно, в Вашей установке denyhosts. Но давайте разыщем его.
Вы получаете ошибку первоначально от logrotate. Так выполняет logrotate:
logrotate /etc/logrotate.conf
Принятие Вас получает ошибку, по крайней мере, у Вас есть восстанавливаемый случай. Теперь давайте посмотрим, находится ли проблема в logrotate или denyhosts. Давайте использовать команду denyhosts, которую мы видели в logrotate:
/etc/init.d/denyhosts restart > /dev/null
Если это дает Вам ошибку, Вы действительно близко к разыскиванию этого. Попытайтесь взлететь">/dev/null" от конца строки для получения большей информации. Отправьте вывод здесь для справки.
Однако, если ни один из вышеупомянутых двух приемов не получил Вас ошибка, но Вы все еще получаете ошибку от заданий крона, у Вас есть проблема. Ожидая неделя между попытками отладить что-то сосет.
Добавьте другую строку к своему/etc/crontab. Скопируйте cron.weekly строку и вставьте ее ниже всех других строк. Затем отредактируйте его так весь, "когда" записи будут звездочками.
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
Изменение, что к:
* * * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
Затем это будет работать однажды минута целый день, всю неделю долго. Это - очевидно, не что-то, что Вы хотели бы оставить там, но это может быть полезно в поиске и устранении неисправностей.
В случаях, где Вы видите ошибки в заданиях крона, которые Вы не видите при запущении скриптов от командной строки, это - почти всегда различие в среде. Проверьте путь сначала.
У меня была такая же проблема после удаления пакета denyhosts. Убедитесь, что у вас действительно установлен пакет:
mlambie@prime:~$ dpkg -l | grep denyhosts
rc denyhosts 2.6-6.1ubuntu1 a utility to help sys admins thwart SSH crac
У вас будет «ii» в качестве первых двух символов, если пакет установлен. Например, у меня установлен openssh-server и я получаю следующий результат:
mlambie@prime:~$ dpkg -l | grep openssh-server
ii openssh-server 1:5.3p1-3ubuntu7 secure shell (SSH) server, for secure access
В моем случае, я думаю, что конфигурация logrotate не была успешно удалена при удалении пакета, поэтому я вручную удалил ее.