Итак, у меня есть два файла, и если в любом из этих файлов появится новая строка, я бы хотел получить мгновенное сообщение (предпочтительно jabber или gTalk), содержащее содержимое этой строки. У вас, ребята, есть предложения по поводу демона Linux или чего-то, что могло бы это сделать?
Если вы ведете журнал через системный журнал, Металог имеет поддержку для выполнения команды всякий раз, когда регистрируется сообщение, соответствующее некоторому критерию. В противном случае вы можете использовать tailf
следить за появлением новых строк в файле журнала.
sendxmpp небольшой Perl-скрипт для отправки сообщений XMPP (возможно, уже доступен в виде пакета для вашего любимого дистрибутива)
Вы можете без труда сшить их вместе с помощью сценария оболочки. Для случая металога создайте сценарий, подобный этому:
#!/bin/sh
echo $* |sendxmpp your-xmpp-id@gmail.com
И добавить command = /path/to/script.sh
в соответствующий раздел metalog.conf
В случае с tailf вы можете попробовать что-то вроде этого, выполняя постоянный запуск:
tailf /var/log/file-to-watch.log |(while true; do read M; echo $M | sendxmpp recipient@gmail.com; done)
sendxmpp требуется действующая учетная запись XMPP, см. справочную страницу, чтобы узнать, как настроить учетную запись, которая будет использоваться.
(по моему опыту, сообщения об ошибках, доставляемые XMPP, как правило, очень раздражают, если они появляются слишком часто ...)
Я сделал этот маленький скрипт на Python. Вы можете использовать его как отправную точку
import xmpp, os, time
login = 'Your.Login' # @gmail.com
pwd = 'YourPassword'
recipient = 'YourFriend@gmail.com'
logfile = "/home/myself/test.log"
def sendmsg(text):
global login, pwd, recipient
cnx = xmpp.Client('gmail.com')
cnx.connect( server=('talk.google.com',5223) )
cnx.auth(login,pwd, 'botty')
cnx.send( xmpp.Message( recipient , text ) )
oldsize = newsize = os.path.getsize(logfile)
while True:
newsize = os.path.getsize(logfile)
if newsize != oldsize:
f = open(logfile)
f.seek(oldsize, os.SEEK_SET)
s = f.read()
if s[-1] == '\n':
sendmsg(s)
oldsize = f.tell()
f.close()
time.sleep(10)
Я использовал информацию о эта страница для подключения xmpppy к Google Talk.