linux user group brescia

immagine del castello

Archivio della mailing list

R: Inviare output a tty da un processo lanciato da Cron

Luca Coianiz lcoianiz a w3.to
Gio 12 Ott 2000 03:16:42 UTC
>>  Spero non sia la solita domanda "da newbie" ma... come si fa a mandare
>> dell'output (segnalazioni e, potendo, "bells") da un processo che gira
>> (immagino) in background "al terminale tty che sto visualizzando in
questo
>> momento" ? [...]
>>  comunque, anche se lo facesse, può sempre essere che io non
>> stia visualizzando QUEL tty (per cui dovrei poter indirizzare "il tty
>> corrente").
> unix e' un sistema per sua natura multiutente e il fatto che una sola
> persona (tu) lo stia usando in un dato momento non fa alcuna differenza
> dal punto di vista del sistema operativo. Analogamente il fatto che
> tanti terminali logici siano in realta' lo stesso terminale fisico, non
> importa alcunche' al sistema.

 Ok... mi pare giusto. Ma dici che non c'è un riferimento, una qualche
variabile, che dice al sistema "questa è la tty visualizzata in questo
momento" ?

> Pensa ad essere in una situazione in cui hai effettivamente tanti
> terminali distinti (diciamo 8) e su ognuno di essi 8 persone distinte
> effettuano il login.

 Non lo trovo strano: fino a poco tempo fa lavoravo in una situazione in cui
2-3000 persone accedevano contemporaneamente (di solito da altrettanti
terminali, veri o emulati) ad un unico Host.
 Per dire che, tendenzialmente, non sono portato a pensare "monotask" (anche
se uso ancora Windoze). ;-)

> Alcuni utenti potrebbero usare lo stesso username
> (diciamo 3 luca, 2 mario, 1 pippo ed 1 pluto).

 Ecco... diciamo che non lo ritengo un problema... anzi, casomail il
contrario: se riuscissi a far visualizzare una schermata di alert "a tutti i
root connessi" (e, in subordine, "ad almeno un altro userid non-root") avrei
risolto il problema.
 Diciamo che anche una soluzione "foreach user..." mi potrebbe andar bene.

> Tu vuoi chiedere al
> sistema "manda l'output sul terminale che sto usando io". Che cosa vuol
> dire? Se sei "loggato" come luca, come fa il sistema a distinguere te
> dagli altri 2?

 Se lo manda anche agli "altri" a me va benissimo.  :-)

> Quello che puoi fare e' mandare un messaggio a chiunque sia "loggato"
> con un certo username (ad esempio con il comando write) ma nel tuo caso
> significa che il messaggio ti compare probabilmente su piu' tty e non
> solo su quella che stai fisicamente usando.

 Capito: mi vado a studiare la Write.

> Oppure potresti esaminare
> l'output del comando w e in base al tempo di inattivita' selezionare una
> sola tty. Ovviamente in questo caso se stati vedendo un terminale senza
> pero' immetter dati quel terminale risulta idle al pari degli altri e
> quindi capire di inviare il messaggio proprio a quel terminale secondo
> me e' una impresa ardua.

 No... beh... diciamo che l'ambaradan non è "mission critical": posso
permettermi, come peraltro sta già accadendo, di perdermi buona parte delle
segnalazioni ed andarmele a vedere poi sul log.
 Mettere in piedi un marchingegno bizantino per riuscire ad intercettare
SICURAMENTE la tty che sto usando al momento va molto al dilà di quello che
mi serve.

> A maggior ragione, tieni anche presente che se sei in X potresti aver
> lanciato diversi xterm, ognuno dei quali diventa a tutti gli effetti un
> tty (almeno su solaris ed aix, se ben ricordo), tutti assiciati allo
> stesso user name.

 Grazie della precisazione, comunque utile, ma al momento il problema (per
fortuna) non coinvolge X: tutto gira in modalità testuale.
(anche se immagino che una Write mi possa arrivare anche in X, no ?)

> Nel tuo caso specifico io opterei per inviare un msg ad un utente
> (indipendentemente dalla tty),

 Farò sicuramente così. Però il messaggio dev'essere di tipo "alert" (in
altri ambienti (IBM) si definisce "unsolicited") e non qualcosa, come la
mail, che (A) si accumula e (B) devo poi andarmi a guardare io se nò perdo
la segnalazione.
 Nel primo caso le segnalazioni (quindi le mail) arrivano ogni 30': se non
ci metto mano poi cado vittima dell'effetto "valanga" (come quando non
raccolgo l'e-mail per un pò... e m'arrivano tutto in un botto 2-300 messaggi
dalla ML).
 Nel secondo caso trovo comunque più comodo andare a vedere il log (che
scorre in permanenza su tty12) piuttosto che ricevere una mail.

 La segnalazione dovrebbe essere qualcosa di più simile a quella che
scaturisce da una chiamata Talk (aka un "paging") verso una userid (root va
benissimo: mi collego quasi sempre così... per fare più danni). ;-)

 L'importante è che la segnalazione, visiva o auditiva che sia, non si
perda: ho provato, con un programmino (setleds) a far blinkare i led della
tastiera... ma è sempre la stessa storia: se lancio il check manualmente
tutto ok mentre se parte da Cron la segnalazione non arriva (anche se i
programmi girano).

> oppure un messaggio di posta elettronica
> (ed in quel caso il sistema ti avvisa quando arriva un nuovo messaggio)

 Anche se è la cosa più semplice da implementare (Cron praticamente lo fa in
automatico) NON è la cosa migliore in questo caso: preferirei un "paging" ad
una segnalazione asincrona.

> oppure vedrei se riesco a combinare qualcosa con la variabile
> PROMPT_COMMAND di bash che ti permette di specificare un comando da
> eseguire prima di ogni prompt (cioe' in pratica quasi ogni volta che
> premi invio in una tty).

 Potrebbe andar bene come "ultima spiaggia" (prima della canna del gas)...
ma sospetto che c'è qualche altro meccanismo più semplice e lineare: devo
scavare meglio.

> Tieni presente pero' che quest'ultimo
> trucchetto e' assolutamente non portabile (non credo che funzioni con
> csh o altre shell).

 Giusto: meglio evitare (anche se per ora mi va bene anche una soluzione
"custom").

> Io non dove linux tenga traccia di quale terminale
> virtuale sia attualmente visualizzata sul monitor, ma non credo che sia
> una buona idea basarsi su questo meccanismo; primo perche' credo che non
> sia  per niente portabile

 Questa è già un'ottima ragione.

> e poi perche' magari capita che lo script vada
> a vedere quel valore proprio una frazione di secondo prima che tu passi
> ad un'altra tty, col risultato che il messaggio verrebbe stampato su una
> tty che non e' quella che ti interessa.

 Come dicevo, questo non è un (gran) problema: non essendo un'applicazione
"mission critical" posso permettermi di perdere una certa percentuale di
segnalazioni (adesso sono c.ca al 100%... a parte quando sto visualizzando,
per puro caso, tty12).
 Se riesco a vedere una scritta lampeggiante (o a udire un beep) mentre
lavoro al PC di fianco, anche se capita dopo 5-6', mi va benissimo: il
check-rate adesso è a 30'.

 Grazie comunque per i vari consigli & valutazioni: proverò ad indagare
sulla write o su meccanismi alternativi di paging generico (anche
multi-user).

 Bye
 Sky

P.S. [5 mins later...] ... [ehm... 25 mins later]  ;-)
 Ho "risolto" con un Wall (a tutti gli users loggati) creando una pagina di
warning. Funzionare funziona... vediamo nei prossimi giorni come và la
convivenza col wall.  ;-)
 Ad ogni modo grazie ancora: spesso più che COME fare una cosa non si sa con
COSA ed il tuo riferimento alla write è stato l'inizio del filo di Arianna
in questo caso.





Maggiori informazioni sulla lista Lug