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

Что не так в этом сценарии bash «test -f», который предотвращает запуск dkimproxy?

Я пытался настроить dkimproxy на своем сервере после того, как долгое время успешно использовал dkfilter. Причина, по которой я выбрал «обновление», заключается в том, что протокол DKIM, похоже, лучше поддерживается, чем DomainKeys, основными поставщиками, такими как Gmail.

Я хочу подписывать только исходящие сообщения, а не проверять входящие. Я настроил dkimproxy_out.conf правильно но rcdkimproxy start ничего не делает. Если я сделаю rcdkimproxy start-outвместо этого он работает.

Я не большой эксперт по bash, но я нашел это в /etc/init.d/dkimproxy

    start)
            test -f $DKIMPROXY_IN_CFG && $0 start-in || exit $?
            test -f $DKIMPROXY_OUT_CFG && $0 start-out || exit $?
            ;;

Что «должно» проверить, существует ли файл конфигурации, и если да, то запустить команду запуска dkimproxy. Я уверен, что файл существует и является правильным (иначе он не запустится вручную), однако я обнаружил, что вручную выполняя test -f /usr/share/dkimproxy/etc/dkimproxy_out.conf; echo $? возвращает 0.

Что могло быть не так в этих утверждениях? Я использую ядро ​​openSUSE 11.3 2.6.32. Если вы считаете, что этот сценарий не работает, я могу попытаться сообщить об ошибке автору dkimproxy.

Спасибо

Новейшие пакет dkimproxy использует следующие строки:

start)
     test -f $DKIMPROXY_IN_CFG && { $0 start-in || exit $?; }
     test -f $DKIMPROXY_OUT_CFG && { $0 start-out || exit $?; }
     ;;

Изменение сценария инициализации на использование приведенных выше строк должно правильно решить проблему с проверкой наличия файлов конфигурации.

Забавно то, что в Debian оба формата работают вообще без проблем.

Как обычно, сценарий использует / bin / sh вместо bash, а в некоторых системах (включая Debian) sh - это Bourne Shell, а / bin / bash - более продвинутая Bourne Again Shell. Обе оболочки ожидают от теста 0 в качестве успеха, поэтому "test && command" является правильным форматом, когда вы хотите запустить команду, если тест завершится успешно.