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

logrotate не выполняет пользовательский сценарий оболочки в postrotate

У меня есть следующий файл конфигурации logrotate

/home/application/*/shared/log/*.log {
  daily
  rotate 10
  missingok
  nocompress
  notifempty
  copytruncate
  sharedscripts
  postrotate
    echo "Hi....." 
    /home/application/test.sh > /home/application/test_bash.log 2>&1
    echo "By....."
  endscript
}

/home/application/test.sh в настоящее время содержимое следует (я пытаюсь в сценарии оболочки создать фиктивный файл, но безуспешно)

#!/bin/sh

echo "=============================================="

Когда я запускаю logrotate, все файлы успешно вращаются, но сценарий test.sh не выполняется

Потпут Logrotate выглядит следующим образом:

запуск сценария postrotate, запуск сценария с аргументом arg / home / application // общий / журнал /.log: "echo" Привет ..... "/home/application/test.sh> /home/application/test_bash.log 2> & 1 echo" By ..... ""

Файл журнала /home/application/test_bash.log не создается.

Я даже пробую простой такой пример

/home/application/*/shared/log/*.log { 
  daily 
  rotate 10 
  missingok 
  nocompress 
  notifempty 
  copytruncate 
  sharedscripts 
  postrotate 
    mkdir /home/application/demo_v2/shared/log/arch 
  endscript 
}

Почему logrotate не выполняет мой сценарий оболочки? Что делаю неправильно?

Как кто-то сказал ранее, команды "echo" завершатся ошибкой, поскольку в logrotate нет TTY, поэтому вы можете попробовать ...

echo "Hi....." > /home/application/test_bash.log
/home/application/test.sh >> /home/application/test_bash.log 2>&1
echo "By....." >> > /home/application/test_bash.log

Неясно, что может сделать logrotate, если вы попытаетесь выполнить что-то вроде эха без TTY.

Выходные данные - logrotate -dvf - похоже, указывают на то, что ваш скрипт запущен.

Сначала попробуйте что-нибудь простое, например - echo foo> /home/application/test_bash.log 2> & 1

Если это сработает, то сценарий будет легко отлаживать.

Logrotate не имеет магического TTY; куда вы ожидали записать этот вывод?

Обычно можно запустить сценарий, который перенаправляет свой вывод в специальный dlog и избегает вывода чего-либо на стандартный вывод; Вы, кажется, перепутали несколько представленных выше понятий.

Возможно, если бы мы знали, что именно вы хотите делать с этим скриптом logrotate кто-нибудь может помочь.