nginx logrotate ошибка в работе cron

10

Я использую Ubuntu 14.04 LTS и nginx на VPS Digital Ocean, и время от времени получаю сообщения о неудачной работе cron:

Тема

Тест Cron -x / usr / sbin / anacron || (cd / && run-parts --report /etc/cron.daily)

Тело письма:

/etc/cron.daily/logrotate: ошибка: ошибка при запуске общего сценария postrotate для /var/log/nginx/*.log частей выполнения: /etc/cron.daily/logrotate завершена с кодом возврата 1

Любые мысли о том, как я могу решить это?

Обновить:

/var/log/nginx/*.log {
  weekly
  missingok 
  rotate 52 
  compress 
  delaycompress
  notifempty 
  create 0640 www-data adm
  sharedscripts
  prerotate
      if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
          run-parts /etc/logrotate.d/httpd-prerotate; \
      fi
  endscript 
  postrotate 
      invoke-rc.d nginx rotate >/dev/null 2>&1
  endscript 
}

Обновить:

$ sudo invoke-rc.d nginx rotate
initctl: invalid command: rotate
Try `initctl --help' for more information.
Крис
источник
похоже, что он не может запустить то, что указано как действие postrotate, покажите нам свой /etc/logrotate.d/nginixскрипт
X Tian
/var/log/nginx/*.log {еженедельно отсутствующий поворот 52 Сжатие с отложенным сжатием notifempty create 0640 www-data adm sharedscripts prerotate if [-d /etc/logrotate.d/httpd-prerotate]; затем \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi \ endcript postrotate invoke-rc.d nginx rotate> / dev / null 2> & 1 endcript}
Крис,
1
Это нормально, чтобы обновить ваш вопрос с дополнительной информацией по запросу. 4 пробела в начале каждой строки делают его блоком кода.
X Тянь
Итак, не invoke-rc.d nginx rotateполучается, попробуйте запустить его от имени соответствующего пользователя и покажите нам этот сценарий, вставьте вывод в исходный вопрос. ТКС.
X Тянь
Пробовал запустить его, получил недопустимую ошибку команды.
Крис

Ответы:

10

Действие после поворота кажется неправильным

Пытаться

invoke-rc.d nginx reload >/dev/null 2>&1

Если вы посмотрите на nginxкоманду, вы увидите действия, которые она примет. Также сообщение, которое вы получили, говорит, что проверкаinitctl --help

xtian@fujiu1404:~/tmp$ initctl help
Job commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

поэтому перезагрузка должна работать и отправлять сигнал HUP на nginx, чтобы принудительно открыть файлы журнала.

X Тянь
источник
Спасибо, эта команда, кажется, запустилась без ошибок. Я обновлю работу cron, и мы пойдем оттуда.
Крис
4

Как уже упоминалось в другом ответе, проблема заключается в том, что invoke-rc.d nginx rotateвозвращается ошибка о том, что rotateдействие не поддерживается. Интересно то, что service nginx rotateработает без проблем.

Я предполагаю, что invoke-rc.dоболочка не поддерживает все действия, которые поддерживает настоящий скрипт инициализации nginx.

Переход invoke-rc.d nginx rotateна service nginx rotateдолжен решить проблему.

Робин Смидсред
источник
3

Я не уверен, что это потому, что initctlдоза не поддерживает эту rotateопцию и когда она была удалена, но вы не единственные, кого это затронуло, и на панели запуска есть открытый отчет об ошибке.

Как упоминалось в других ответах выше и ниже, вы можете отредактировать файл nignx logrotate и заменить проблемную строку

invoke-rc.d nginx reload >/dev/null 2>&1

с другими альтернативами, которые работают,

start-stop-daemon --stop --signal USR1 --quiet --pidfile /run/nginx.pid --name nginx
# or 
service nginx rotate >/dev/null 2>&1
# or
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

Какой бы метод вы ни выбрали, помните, что вы не изменяете файл, который управляется пакетом, и после его изменения он больше не будет обновляться, и вам придется вручную разрешать diff или перезаписывать его новый (который все готово включать исправление).

Рабин
источник
Я не уверен, что ошибка «служебные команды не работают» здесь применима, поскольку в каждой ошибке рассматриваются различные проблемы. (Интересный факт: у меня есть исправление в работах для 1450770)
Томас Уорд
1

Работал для меня:
Заменено
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
С
postrotate service nginx rotate >/dev/null 2>&1

Jadeye
источник
0

Заменить:

invoke-rc.d nginx reload >/dev/null 2>&1

С:

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

Кажется, на более новых версиях Nginx это работает. Я использую 1.9 версии.

bonitarunner
источник