cron script: dovecot: непризнанная услуга

Я использую Let's Encrypt для автоматического создания сертификатов SSL каждые 60 дней с использованием простого сценария оболочки.

После перезагрузки сценария он пытается перезагрузить мои службы, используя команды, которые я бы вводил себе в оболочку, то есть service postfix reload service dovecot reload .

Однако, в то время как первая из них работает очень хорошо, service dovecot reload не работает, жалуясь на непризнанную услугу.

Скрипт запускается как root как cron-job, поэтому я ожидаю, что он узнает все те же сервисы, что и когда я сам зарегистрирован как root, но по какой-то причине dovecot не распознается, но другие без проблем, что я должен вручную перезагрузить dovecot до истечения срока действия старых сертификатов, что ограничивает мой сценарий!

Что отличает нас от dovecot, который мог бы быть непризнанным моим скриптом, но быть признанным без проблем при входе в систему как root?

Выход lsb_release -a :

  No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty 

Выход ps aux | grep dovecot ps aux | grep dovecot :

 root 860 0.0 0.1 22144 1052 ? Ss May09 1:33 /usr/sbin/dovecot -F -c /etc/dovecot/dovecot.conf dovecot 1466 0.0 0.0 9288 572 ? S May09 0:11 dovecot/anvil vmail 22753 0.0 0.4 23904 4116 ? S 16:58 0:00 dovecot/imap vmail 22754 0.0 0.5 25408 5764 ? S 16:58 0:00 dovecot/imap dovenull 24108 0.0 0.3 19188 3812 ? S Sep26 0:10 dovecot/imap-login root 24109 0.0 0.1 9416 1472 ? S Sep26 0:00 dovecot/log root 24111 0.0 0.2 23772 2660 ? S Sep26 0:01 dovecot/config vmail 30218 0.0 0.3 23244 3676 ? S 22:40 0:00 dovecot/imap vmail 30219 0.0 0.3 23252 3540 ? S 22:40 0:00 dovecot/imap root 30293 0.0 0.4 27924 4416 ? S 22:44 0:00 dovecot/lmtp dovecot 30294 0.0 0.4 39632 4756 ? S 22:44 0:00 dovecot/auth root 30295 0.1 0.4 39728 4900 ? S 22:44 0:00 dovecot/auth -w 

One Solution collect form web for “cron script: dovecot: непризнанная услуга”

Кажется, что ваша проблема связана с тем, что скрипты cron запускаются с другим значением PATH по умолчанию. Например, на Ubuntu в качестве пользователя root у вас есть /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin в вашем PATH по умолчанию. Но ваш скрипт cron с правами root имеет более ограниченное значение PATH: /usr/bin:/bin .

Я рекомендую вам установить PATH среды PATH в верхней части ваших cron-скриптов:

 PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' 

В этом конкретном случае проблема заключается в том, что в service скрипте используется /sbin/initctl (Upstart), который отсутствует в PATH, используемом cron. Если эта команда выходит из строя, она пытается использовать традиционный сценарий /etc/init.d/${SERVICE} . Но не все сервисы включают этот старый скрипт, поэтому ваш скрипт работает с некоторыми службами, но не с другими.

  • Оболочка оболочки оболочки для предотвращения запуска команды без аргументов?
  • Условное выполнение - запуск постоянных подпроцессов и коротинов
  • Как динамически использовать перенаправление вывода?
  • Чтение двух списков, содержащих имена файлов
  • Как запускать несколько сценариев одновременно?
  • Пакетное переименование в соответствии с количеством страниц в pdf-файле
  • Быстрое извлечение поля с помощью grep
  • Обнаруживать, если переменная пуста
  • Какова наилучшая практика для представления логического значения в сценарии оболочки?
  • Лучше, чем `tee | разрезать | ... | paste`
  • Файл конфигурации SSH + скриптовый скрипт
  • Linux и Unix - лучшая ОС в мире.