Помилка nginx logrotate на роботі cron


10

Я запускаю Ubuntu 14.04 LTS і nginx на VPS Digital Ocean VPS і періодично отримую ці електронні листи про невдалу роботу з cron:

Тема

Крон-тест -x / usr / sbin / anacron || (cd / && run-parts --report /etc/cron.daily)

Основний текст електронної пошти:

/etc/cron.daily/logrotate: помилка: помилка запуску спільного сценарію postrotate для '/var/log/nginx/*.log' run-parts: /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.

схоже, що він не може запустити те, що вказано як дії, що виконуються, і покажіть нам свій /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 Tian

Отже, invoke-rc.d nginx rotateне вдається, спробуйте запустити це як відповідний користувач і покажіть нам і цей сценарій, вставте висновок у своє початкове запитання. tks.
X Tian

Спробувавши його запустити, отримав помилкову помилку команди.
Кріс

Відповіді:


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, щоб примусити повторно відкрити логіни.


Дякую, ця команда, здається, виконується без помилок. Я оновлю роботу cron, і ми підемо звідти.
Кріс

4

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

Я гадаю, що invoke-rc.dобгортка не підтримує всі дії, які підтримує власне сценарій nginx init.

Зміна 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)
Thomas Ward

1

Працював для мене:
Замінено
postrotate invoke-rc.d nginx rotate >/dev/null 2>&1
З
postrotate service nginx rotate >/dev/null 2>&1


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 версії.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.