The following instructions show how to automatically monitor your TURM server and restart it during the downtime.
1. Install pexpect lib in Python
sudo pip install pexpect --upgrade
2. Edit MonitorStun.py
- Telnet your TURN Serer
- If it is down, ssh to your server and restart it
#!/usr/bin/env python
import socket
import subprocess
import sys
from datetime import datetime
from pexpect import pxssh
# SSH TO TURN SERVER and restart it
def connect_turn_server():
s = pxssh.pxssh()
if not s.login ('TURN Server IP', 'SERVER PORT', 'ACCOUNT', 'PASSWORD'):
print "SSH session failed on login."
print str(s)
else:
print "SSH session login TURN successful"
s.sendline ('sudo turnserver -c /usr/local/etc/turnserver.conf --daemo')
s.prompt() # match the prompt
print s.before # print everything before the prompt.
s.logout()
# Telnet TURN Server to check it is alive or not on PORT 3478 or 3479
# Clear the screen
subprocess.call('clear', shell=True)
# Ask for input
remoteServer = 'SERVER IP'
remoteServerIP = socket.gethostbyname(remoteServer)
# Print a nice banner with information on which host we are about to scan
print "-" * 60
print "Please wait, scanning remote host", remoteServerIP
print "-" * 60
# Check what time the scan started
t1 = datetime.now()
# Using the range function to specify ports (here it will scans all ports between 1 and 1024)
# We also put in some error handling for catching errors
try:
for port in range(3478,3479):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((remoteServerIP, port))
if result == 0:
print "Port {}: Open".format(port)
else:
print "TURN Server is down"
connect_turn_server()
print "restart TURN Server OK"
sock.close()
except KeyboardInterrupt:
print "You pressed Ctrl+C"
sys.exit()
except socket.error:
print "Couldn't connect to server"
sys.exit()
*/1 * * * * /your_path/monitorStun.py
Of course, you can apply this technique to monitor any services such as SIP Proxy with port 5060, Apache with port 80, or Tomcat with port 8080.