Câu trả lời:
Nếu bạn đang ghi nhật ký syslog, Metalog có hỗ trợ để thực thi lệnh bất cứ khi nào một thông báo phù hợp với một số tiêu chí được ghi lại. Mặt khác, bạn có thể sử dụng tailf
để xem các dòng mới trong tệp nhật ký.
sendxmpp là một tập lệnh perl nhỏ để gửi tin nhắn XMPP (có thể đã có sẵn dưới dạng gói cho bản phân phối yêu thích của bạn)
Bạn có thể ghép hai cái đó lại với nhau bằng một kịch bản shell mà không gặp quá nhiều khó khăn. Đối với trường hợp metalog, hãy tạo một tập lệnh như thế này:
#!/bin/sh
echo $* |sendxmpp your-xmpp-id@gmail.com
Và thêm command = /path/to/script.sh
vào phần có liên quan của metalog.conf
Đối với trường hợp tailf, bạn có thể thử một cái gì đó như thế này, chạy một cách bền bỉ:
tailf /var/log/file-to-watch.log |(while true; do read M; echo $M | sendxmpp recipient@gmail.com; done)
sendxmpp cần một tài khoản XMPP hợp lệ, xem trang hướng dẫn để biết cách định cấu hình tài khoản sẽ được sử dụng.
(từ kinh nghiệm của tôi, các thông báo lỗi do XMPP gửi có xu hướng trở nên khá khó chịu nếu chúng quá thường xuyên ...)
grep
ing, có lẽ bạn cần phải thêm --line-buffered
vào câu thần chú cho các tin nhắn để hiển thị.) Tôi chỉ cần bỏ ra một giờ tốt cố gắng tìm ra lý do tại sao các thông điệp xuất hiện bừa bãi hoặc không gì cả.
Tôi đã thực hiện kịch bản con trăn nhỏ đó. Bạn có thể sử dụng nó như một điểm khởi đầu
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)
Tôi đã sử dụng thông tin trên trang đó để kết nối xmpppy với Google Talk.