Đuôi máy chủ đăng nhập vào XMPP?


8

Vì vậy, tôi có hai tệp và nếu một dòng mới xuất hiện trên một trong hai tệp này, tôi muốn nhận IM (tốt nhất là jabber hoặc gTalk) có chứa nội dung của dòng đó. Các bạn có bất kỳ đề xuất cho một daemon Linux hoặc một cái gì đó có thể làm điều đó?

Câu trả lời:


14

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.shvà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 ...)


Vui nhộn. Tôi chỉ tìm thấy sendxmpp và thiết lập một cái gì đó như thế này. Chưa nghe nói về tailf, cảm ơn.
icco

Lưu ý bên lề: Trong trường hợp có vấn đề, hãy kiểm tra hành vi đệm của đường ống của bạn! (Nếu bạn đang greping, có lẽ bạn cần phải thêm --line-bufferedvà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ả.
không ai

2

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.


Điều này có yêu cầu bất kỳ phụ thuộc Python nào hay XMPP được bao gồm trong Base không?
Tom

1
Bạn phải cài đặt nó từ xmpppy.sourceforge.net
Alex Jasmin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.