Вопрос

I have recently started using cgi. As I have to display port usage information about certain ports, I had written the following code:

#!/bin/bash

echo "Content-type: text/html"
echo ""
echo "<html><head><title>PortInfo</title></head><body><center>"
echo "<h1>Port 80 Usage Info</h1>"

#method1
echo "<pre> $(lsof -i :80) </pre>"

#method2
echo "$(lsof -i :80 > /home/shine/Desktop/tmp.txt)"
echo "<pre> $(cat /home/shine/Desktop/tmp.txt) </pre>" 

echo "<center>Information generated on $(date)</center>"
echo "</center></body></html>"

Method 1: The problem over here is that the echo "<pre> $(lsof -i :80) </pre>" does not give any output.

Method 2: In this method echo "$(lsof -i :80 > /home/shine/Desktop/tmp.txt)" never creates a file named tmp.txt on the desktop, as it is supposed to do.

Important Note: Both the methods specified above run perfectly once they are executed in the terminal.

Это было полезно?

Решение

So I kind of found the answer I was searching for, more like an alternative.

Somebody mentioned somewhere, something about cron scripts so, I did the following.

Step I:

sudo crontab -e

Enter 2 for nano editor

Add the following lines:

* * * * * lsof -i :80 > /home/shine/port80.txt
* * * * * lsof -i :3000 > /home/shine/port3000.txt

Note:The above lines of code will generate two text files containing port 80 & 3000 info in the current users' home directory every minute.

ctrl+o, enter, ctrl+x to save and exit.

Step II:

In apache's www directory Create a php file with the following code.

<?php

$output80 = shell_exec("cat '/home/shine/reports/port80.txt'");
echo "<pre>$output80</pre>";
$output3000 = shell_exec('cat "/home/shine/reports/port3000.txt"');
echo "<pre>$output3000</pre>";

?>

This is the only way I can think of at this moment to make lsof work on a web page.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top