У меня есть небольшой инструмент для ведения журнала на моем Linux-компьютере, который необходимо перезапускать каждые 20-30 минут, потому что узел журнала время от времени завершает сеанс.
как вы собираетесь создать сценарий для перезапуска программного обеспечения, подобного этому.
команда для запуска инструмента будет примерно такой
корень @ 25-3b-1d-46-3f-13: / home / # logdrift -f 10.15.12.10 test.log
при перезапуске ему нужно добавить номер к имени файла test.log, например test1.log
я хотел бы использовать logrotate для этого вы можете затем настроить сценарий пост-ротации (используя директиву postrotate), который активируется из logrotate для перезапуска этой программы. Традиционно эта программа должна принимать сигнал SIGHUP для повторного открытия своих журналов, но я никогда не слышал о logdrift.
Logrotate будет вызываться с помощью cron (который вы используете для запуска чего-либо каждые X минут, часов, дней и т. Д.). Logrotate также будет обрабатывать приращение журналов, беря предыдущие журналы и делая их log.1, а затем делая log.1 log.2 и т. Д.
Если эта программа является демоном, я бы создал сценарий инициализации для ее запуска и остановки. это статья есть пример того, как это сделать для систем, подобных Redhat. См. Сценарии в /etc/init.d/, где приведены примеры остановки и запуска программ.
Команда Montecristo cron - хороший способ запланировать задание каждые 20 минут. Однако, как написано, он запустит новый экземпляр «command», не убивая старый. Он также не помещает запись в "test1.log".
Я предполагаю, что целевая программа называется "#logdrift" (ведущий хеш допустим, но он представляет некоторые неудобные проблемы с экранированием), и что вам требуется ровно один ее экземпляр, работающий постоянно.
Вместо того, чтобы запись cron запускала целевой процесс напрямую, я бы создал простой сценарий-оболочку и выполнял бы его каждые 20 минут. Здесь у обертки будет 3 обязанности:
Однако для большинства программ не требуется регулярный перезапуск. Вместо того, чтобы создавать быстрый обходной путь, такой как задание cron и сценарий оболочки, может быть более целесообразным решить основную проблему.
*/20 * * * * /path/to/your/command
Это выполняется каждые 20 минут.
Чтобы изменить номер файла журнала, вы можете посмотреть каталог, в котором он находится, и проанализировать его имя. Если у него нет номера, у нового файла будет 1 перед точкой, если у него есть номер, просто добавьте к нему 1.
Мне лично не нравится идея иметь переменную с более широкой областью действия для подсчета.
Для этого уже существует отличная утилита, о которой многие забывают: в этом
Предлагаю добавить:
ld:35:respawn:/usr/local/bin/logdrift -f 10.15.12.10 test-$(%F-%T).log
в / etc / inittab.
Единственное, о чем вам нужно беспокоиться, это то, что если процесс возрождается слишком быстро (> 10 раз за 2 минуты), он откажется запускать его повторно в течение 5 минут. Считайте, что это особенность. :)
Если у вас есть сценарий запуска, который вызывает logrotate, вы можете поместить его в inittab с директивой respawn. Это перезапустит процесс каждый раз, когда он будет завершен.
в cron:
* * * * sun,tue,thu,sat shutdown -r now
Это перезагружает воскресенье, вторник, четверг и субботу.