PDA

View Full Version : Web page x comandare uno script bash: possibile..??


massimilianonball
10-09-2010, 22:41
Ciao ragazzi, ho deciso di scrivere xké mi serve una dritta-inidirizzamento..
A casa mi sono realizzato un serverino linux comandato da uno script x lanciare i vari programmi (in conseguenza iptables), visualizzare log di sistema, occupazione cpu-ram-hd ecc.. ecc..
Tutto funziona senza problemi, adesso l'idea sarebbe di utilizzare una pagina web x comandare questo script in modo da evitarmi la noia di dover effettuare ogni volta login in ssh.. :cool:
Quindi vi chiedo, considerando che questo script piano piano è diventato abbastanza complesso (ha una prima pagina di una decina di opzioni che poi a loro volta rimandano ad una serie di altre opzioni e/o output), da dove inizio x realizzare questa pagina web..?? :muro:
Specifico inoltre che ho letto già un sacco di documentazione e ho trovato comandi utili come "exec" o "system" o "nl2br" con i quali ho realizzato semplici pagine php con dei link che rimandano ad altre pagine che mi eseguono ciascuna un comando ma di questo passo finirei tra 6 mesi a tradurre in pagina web tutto lo script.. :help:
Cosa mi consigliate x realizzare questa sorta di webmin in modo meno "maccheronico" e più efficace..??
Non voglio far perdere tempo a nessuno, non pretendo spiegazioni passo-passo, mi basterebbe una dritta in quanto partendo da ZERO con php o html, non so nemmeno se sta cosa sia fattibile e se si da dove iniziare.. :help:
Grazie..!!

clockover
11-09-2010, 00:40
Io gli darei di GWT... Ti crei un'interfaccia dove potresti spuntare le varie opzioni del tuo script e una volta dato l'ok fa partire un'exec dello script con le opzioni spuntate! L'ho buttata giù li per ora ma secondo me non viene malaccio!

massimilianonball
11-09-2010, 10:00
Grazie clock..!! Sono fuori casa quindi non posso approfondire..
Cmq ho dato una micro occhiata da google e ho visto che stai parlando delle sdk di google x la realizzazione di siti.. O sbaglio..??
Per iniziare andrebbero benissimo ma considera che sul mio server gira già lamp quindi volevo evitare di installare altri programmi che facciano (anche) da web server.. Ad ogni modo grazie ancora, appena torno a casa do un occhiata poi ti rispondo meglio.. Ciao..!!

cionci
11-09-2010, 10:32
In php puoi eseguire tranquillamente lo script e prenderne l'output. A quel punto puoi includere direttamente l'output dello script all'interno del tag <pre></pre> e visualizzarne l'output così com'è.

http://php.net/manual/en/function.exec.php

Per stampare il vettore ti basta:

foreach ($output as $value) {
echo $value."\n";
}

massimilianonball
11-09-2010, 11:47
..o ecco grazie anche a te cionci..
Avevo provato il comando exec come ho scritto prima ma mi mancava come visualizzare l'output..
Appena riesco provo e vi faccio sapere subito..!!

massimilianonball
11-09-2010, 19:05
Allora..
ho cercato su google e ho fatto qualche prova. Con exec o anche con shell_exec o cmq tutti i comandi elencati qui:
http://us3.php.net/manual/en/ref.exec.php
riesco ad eseguire un singolo comando tipo "cat somefile" o "ls somedir" e conseguentemente ne visualizzo l'output sulla pagina web (come da suggerimento di cionci) quindi fin qui tutto ok. :read:
Il problema però è che se eseguo l'intero script io vedo stampato a video la prima pagina dello script (quella con una decina di opzioni tra cui scegliere come accennavo nel primo post) sotto forma di testo, non come link con cui interagire.. :doh:
Cioè io vedo la pagina web con "premi 1 x.." "premi 2 x.." ma poi non posso cliccare su nulla.. Quindi così non va bene.. :muro:
Ho approfondito ancora anche il suggerimento di clock ed in effetti una specie di inerfaccia con cui interagire sarebbe perfetta.. il problema è che come accennavo avendo già lamp non voglio installare altri webserver..
Quindi torniamo al punto di partenza..
Suggerimenti..??
Grazie..!!

clockover
11-09-2010, 23:48
Se ho capito male fermami... Allora tu quando esegui lo script vengono fuori tutte queste opzioni tra cui scegliere ed eseguendole via web vorresti poter renderle "cliccabili" e quindi eseguibili

cionci
12-09-2010, 08:31
Chiaramente non si può interagire a questi livelli con un programma... O meglio, da php non credo si possa interagire direttamente come stai cercando di fare tu.

Sperando che il tuo script abbia solamente un unico menu di scelta, devi copiare il menu su una pagina web e, per ogni opzione, creare un collegamento alla pagina php che esegue quell'opzione (in sostanza devi realizzare un link con esegui.php?a=X con X il numero dell'opzione corrispondente al link, che dovrai recuperare tramite $_REQUEST['a']).

esegui.php dovrà costruire il comando shell per eseguire lo script senza intervento dell'utente.
Ad esempio, avendo uno script che visualizza il menu:

1 - opzione a
2 - opzione b
3 - opzione c

Il comando per eseguire opzione b sarebbe:

echo "2" | ./script.sh

Se lo script avesse molti menu sarebbe il caso di modificarlo in modo da leggere da riga di comando tutti i possibili parametri (la cosa non dovrebbe essere nemmeno molto complicata) invece di visualizzare il menu. In questo modo puoi pilotarlo direttamente realizzando una form in cui specifichi i vari parametri.

massimilianonball
12-09-2010, 11:05
Risposta.

@clockover: si hai capito perfettmanete, è esattamente quello che mi serve.

@cionci: lo script in effetti è cresciuto fino ad avere diversi menu.. Io avevo pensato di risolvere in questo modo.
Per tutti gli output dello script che vanno semplicemente stampati a video, con 2 righe di codice mando l'output dello script su un file Pippo.txt, con nl2br lo modifico in tempo reale e ho già la pagina pronta con tutto l'output così come mi serviva.

esempio:

<?php
echo nl2br("One line.\nAnother line.");
?>

Funziona sia riga x riga sia con un'intera pagina.txt
Alla fine della pagina aggiungerei solamente un link x tornqre al menù precedente o di partenza.
X i log, quindi x stampe a video "dinamiche" utilizzerei il metodo di sopra con in più un refresh di 3-5 secondi per la pagina.
Quindi fin qui quasi indolore..
Per la pagina principale, quella con tutti i link e gli exec come suggerivi tu, avrei pensato ad una combinazione HTML-php visto che il primo (stando a quello che ho letto..) è più personabilizzabile graficamente. Una cosa del genere:

esempio:

<html>
<head>
<title>
<?php
echo "Pagina di prova PHP";
?>
</title>
</head>
<body>
<?php
echo "Buona giornata!";
?>
</body>
</html>


Come "impaginazione" avrei pensato ad un elenco a righe composto da:
Led - link con il programma da lanciare/stoppare, con il led che rosso o verde ne indica lo stato attuale.. Ho visto che è abbastanza facile aggiungere foto o altre robe alla pagina web, x adesso non ho ancora trovato il modo di aggiungere questi l'led colorati.. ma questo è un dettaglio..
Ho trovato invece come aggiungere box chech-unchecked, magari li potrei usare al posto dei led colorati (che cmq rimangono in pole position):

esempio:

<input type=checkbox name=ck1> <!-- Per inserirlo già spuntato: checked="checked">-->


Ho già provato la parte dei log e funziona, adesso proverò queto ibrido HTML-php poi vi dico com'è andata.. X adesso grazie a tutti x le dritte..
Farò altre prove e vi farò sapere, x adesso grazie ancora..!!

cionci
12-09-2010, 11:49
@cionci: lo script in effetti è cresciuto fino ad avere diversi menu.. Io avevo pensato di risolvere in questo modo.
Per tutti gli output dello script che vanno semplicemente stampati a video, con 2 righe di codice mando l'output dello script su un file Pippo.txt, con nl2br lo modifico in tempo reale e ho già la pagina pronta con tutto l'output così come mi serviva.
Il problema non è l'output dello script. Il problema è l'input dello script.

massimilianonball
12-09-2010, 14:35
Infatti, avevo sbirciato durante il gran premio e ho visto che avevo scritto una cavolata.. Faccio un po' di prove quando riesco poi ti dico, grazie..!!

cionci
12-09-2010, 14:51
Devi rendere il tuo script controllabile completamente tramite le opzioni di riga di comando (come dopo tutto quasi tutti i programmi per la shell, difficilmente sono interattivi).