Let say you need to run a command (which you use frequently) on your headless Linux box, such as, copying files, start/stop services, reboot, etc. However too lazy to go to the physical machine or open a ssh command from another pc.
Would it be nice if we have a web application that can easily be accessed through a web browser (even from a mobile web browser), to execute those commands. All we have to to is type the url (http://my-server-ip-address:myportnumber), and click on a link.
All these could easily be achieved using very simple service using Python.
1. Create a simple Python script. The Python script will be using WSGI to serve HTTP request/response.
vi mypythonscript.py
2. A sample of the Python script below:
import os
from cgi import parse_qs, escape
def hello_world(environ, start_response):
parameters = parse_qs(environ.get('QUERY_STRING', ''))
if 'type' in parameters:
mycommand = escape(parameters['command'][0])
else:
mycommand = ''
start_response('200 OK', [('Content-Type', 'text/html')])
if mycommand == 'copyfile1':
#your linux command here. Example below
os.system('cp myfile1.txt mynewfile.txt')
elif mycommand == 'copyfile2':
os.system('cp myfile2.txt mynewfile.txt')
return ['''Command to execute: %(mycommand)s
<a href='?command=copyfile1'>Copy file 1</a>
<a href='?command=copyfile2'>Copy file 2</a>
''' % {'mycommand': mycommand}]
if __name__ == '__main__':
from wsgiref.simple_server import make_server
#put your own server ip address and port here
srv = make_server('127.0.0.1',81, hello_world)
srv.serve_forever()
3. Make the Python script run on every startup. Create a bash script for this:
vi myserver
4. Here’s the script for the bash file:
#! /bin/sh
# /etc/init.d/myserver
#
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting myserver "
python /home/username/mypythonscript.py&
echo "[OK]"
;;
stop)
echo "Stopping myserver "
kill -9 `pidof python`
echo "[OK]"
;;
*)
echo "Usage: /etc/init.d/myserver {start|stop}"
exit 1
;;
esac
exit 0
5. make the bash script executable.
chmod +x myserver
6. copy myserver script to /etc/init.d
sudo cp /wherever/you/saved/myserver /etc/init.d/myserver
7. update the startup folders to include the new script.
sudo update-rc.d myserver defaults
8. To test your Python web app, open a web browser, and type:
http://my-server-ip-address:81