Jawaban:
Jika Anda masuk melalui syslog, Metalog memiliki dukungan untuk mengeksekusi perintah setiap kali pesan yang cocok dengan beberapa kriteria dicatat. Jika tidak, Anda dapat menggunakan tailf
untuk menonton baris baru dalam file log.
sendxmpp adalah skrip perl kecil untuk mengirim pesan XMPP (mungkin sudah tersedia sebagai paket untuk distribusi favorit Anda)
Anda bisa menjahit keduanya bersama-sama dengan skrip shell tanpa terlalu banyak kesulitan. Untuk kasus metalog, buat skrip seperti ini:
#!/bin/sh
echo $* |sendxmpp your-xmpp-id@gmail.com
Dan tambahkan command = /path/to/script.sh
ke bagian yang relevan dari metalog.conf
Untuk kasus tailf, Anda dapat mencoba sesuatu seperti ini, jalankan dengan cara yang gigih:
tailf /var/log/file-to-watch.log |(while true; do read M; echo $M | sendxmpp recipient@gmail.com; done)
sendxmpp memerlukan akun XMPP yang valid, lihat halaman manual cara mengkonfigurasi akun yang akan digunakan.
(dari pengalaman saya, pesan kesalahan yang dikirim XMPP cenderung menjadi sangat menjengkelkan jika terlalu sering ...)
grep
, Anda mungkin harus menambah --line-buffered
mantera agar pesan muncul.) Saya hanya menghabiskan waktu yang baik untuk mencari tahu mengapa pesan muncul dengan sembarangan atau tidak sama sekali.
Saya membuat skrip python kecil itu. Anda dapat menggunakannya sebagai titik awal
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)
Saya menggunakan informasi pada halaman itu untuk menghubungkan xmpppy ke Google Talk.