LINUX.ORG.RU

Проверка, что лог бежит

 


0

1

Добрый день!

Есть программа, в которой каждые 5 секунд появляется новая запись в логе. Требуется, чтобы была какая-то программа, которая анализировала размер этого файла, каждые 10 секунд, и если он не изменился с предыдущего, то перегрузить сервис.

Есть ли что то такое штатное? А то писать я пока не «мостак» такое и времени нету.


Скорее всего тебе нужно какой-то там systemd-unit сделать, оно вроде может в нужную тебе задачу.

Sh-
()
Ответ на: комментарий от vvn_black

да я не прошу, чтобы за меня написали. Я ищу просто варианты готового решения.

shtrih
() автор топика

bash скрипт с циклом, в котором вызывается stat filename.log

anonymous
()

если про системд, то можно сделать systemd.path с PathChanged или PathModified который будет дергать скрипт.
в скрипте прописать:

  1. если файл /run/myscript.timestap существует и имеет давность больше десяти секунд то рестарт сервиса.
  2. touch /run/myscript.timestap
pfg ★★★★★
()
Ответ на: комментарий от redwagon

не отваливается. Так как перезапуск сервиса помогает

shtrih
() автор топика

Можно заставить cron дёргать скрипт с анализатором и перезагрузчиком сервиса.

gedisdone ★★★
()

inotify-tools

anonymous
()
#!/bin/bash

log_file=/var/log/service.log
delay=10  # seconds
service_name=gammu-smsd

while :; do
    (( $(date +%s) - $(stat -c %Y "$log_file") > delay )) && service "$service_name" restart
    sleep "$delay"
done

Для отладки можете перед командой service поставить echo - ... && echo service "$service_name" restart

spirit ★★★★★
()
Ответ на: комментарий от spirit

Вот сделал на pyton, хотя его не знаю вообще.

Единственное не понимаю, как теперь в нём выполнить перезагрузку, по аналогии sysmtemctl restart gammu-smsd

#!/usr/bin/env python3.6
import os
from datetime import datetime
os.system(r' >/var/log/gammu-smsd')

filename = "/var/log/gammu-smsd"
statbuf = os.stat(filename)
print("Modification time: {}".format(statbuf.st_mtime))

ts = int(statbuf.st_mtime)
#value1=datetime.fromtimestamp(time.mktime(ts))

val1=datetime.fromtimestamp(ts)

print(datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))

#print(value1)

import datetime,time
dt = datetime.datetime.now()
value =datetime.datetime.fromtimestamp(time.mktime(dt.timetuple())-14)
print(value.strftime('%Y-%m-%d %H:%M:%S'))

if val1<value :
    print(" Перегрузи сервис " )                                     
shtrih
() автор топика
Последнее исправление: shtrih (всего исправлений: 1)
Ответ на: комментарий от shtrih

И ещё один вопрос, как правильно записать в cron перезапуск sevice?

*/10 * * * * «Как записать перезапуск сервиса ниже?»

 cat /etc/systemd/gammu-smsd.service
[Unit]
Description=SMS daemon for Gammu
Documentation=man:gammu-smsd(1)
After=mysql.service postgresql.service
After=network.target
Wants=network-online.target
After=nerwork-online.target

[Service]
EnvironmentFile=-/etc/sysconfig/gammu-smsd
# Run daemon as root user
ExecStart=/usr/bin/gammu-smsd --pid=/var/run/gammu-smsd.pid --daemon
# Run daemon as non-root user (set user/group in /etc/sysconfig/gammu-smsd)
#ExecStart=/usr/bin/gammu-smsd --user=${GAMMU_USER} --group=${GAMMU_GROUP} --pid=/var/run/gammu-smsd.pid --daemon
ExecReload=/bin/kill -HUP $MAINPID
ExecStopPost=/bin/rm -f /var/run/gammu-smsd.pid
Type=forking
PIDFile=/var/run/gammu-smsd.pid
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
shtrih
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.