Come vedere se script python è in esecuzione
- omegaub
- Scoppiettante Seguace
- Messaggi: 342
- Iscrizione: martedì 2 dicembre 2008, 12:50
- Desktop: gnome
- Distribuzione: Ubuntu 18.04.4 LTS
- Sesso: Femminile
- Località: Boschi romani
Come vedere se script python è in esecuzione
Ciao a tutti!
Sto gestendo un server Ubuntu e degli script in python3 che girano su di esso, a volte avviati con il cron a volte avviati da sito web, come posso vedere da sistema operativo se quel determinato script è in esecuzione? E c'è un modo per vedere se è stato attivato dal cron o da sito web?
Grazi a tutti!
Mic
Sto gestendo un server Ubuntu e degli script in python3 che girano su di esso, a volte avviati con il cron a volte avviati da sito web, come posso vedere da sistema operativo se quel determinato script è in esecuzione? E c'è un modo per vedere se è stato attivato dal cron o da sito web?
Grazi a tutti!
Mic
-
- Scoppiettante Seguace
- Messaggi: 363
- Iscrizione: venerdì 10 dicembre 2021, 18:33
- Desktop: fvwm
- Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
- Sesso: Maschile
- Località: Paneropoli
Re: Come vedere se script python è in esecuzione
Io uso questo comando per monitorare i miei processi in generale. Non so cosa faccia vedere se il processo e' "pitonico"
Il fatto di visualizzare e sortare il ppid (parent process id) dovrebbe aiutare a capire da chi il processo e' stato schedulato.
La man page di ps puo' suggerire altre opzioni al poato di "command" (comm, ucomm, args)
Codice: Seleziona tutto
ps -A -o ppid,pid,user,command --sort=ppid,pid,user !* | more
La man page di ps puo' suggerire altre opzioni al poato di "command" (comm, ucomm, args)
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
- Clover
- Scoppiettante Seguace
- Messaggi: 298
- Iscrizione: giovedì 30 agosto 2012, 14:04
- Desktop: KDE
- Distribuzione: Kubuntu x86_64
Re: Come vedere se script python è in esecuzione
Io invece cerco prima il binario del processo che mi interessa (notare la seconda colonna che è il PID e ti servirà successivamente):
e poi vado a evidenziare il pid del processo che mi interessa nella visualizzazione ad albero (lo evidenzia in grassetto in mezzo a tutti i processi):
nota: al posto di <PID> devi mettere quello del processo che ti interessa
Codice: Seleziona tutto
ps -aux | grep python
Codice: Seleziona tutto
sudo pstree -H <PID>
Re: Come vedere se script python è in esecuzione
Top, htop, btop... Qualsiasi task manager va bene: fanno già il tree. Per gli script specifici basta solo greppare
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
- DoctorStrange
- Imperturbabile Insigne
- Messaggi: 2854
- Iscrizione: mercoledì 14 ottobre 2015, 9:33
- Desktop: Gnome3
- Distribuzione: Ubuntu 22.04 LTS Jammy Jellyfish
- Sesso: Maschile
- Località: Roma, Italia
Re: Come vedere se script python è in esecuzione
In quale contesto vengono eseguiti questi script python? Se usassi Spark od una delle applicazioni della suite Cloudera, potresti accedere alla consolle Hue e vedere esattamente quali processi sono pendenti, quale server lo ha lanciato ed anche una statistica inerente il congestionamento del server, o cluster dove il processo è in esecuzione.
Resta comunque il fatto che per killarlo, il metodo elettivo rimane quello che ti hanno già indicato. Accedi tramite consolle Bash e lo killi brutalmente con "kill -9".
Per il genere di lavoro che faccio, mi è capitato molto spesso che utenti lanciassero script in Python senza poi preoccuparsi di arrestarli o controllarli. Restavano appesi per delle ore in attesa che una tabella del DB diventasse disponibile e poi intervenivo io che li "brutalizzavo" .
Tutto questo per dire: se sviluppi questo genere di scriipt sarebbe utile che tui inserissi dei "kill switch", ovvero delle istruzioni che, trascorso uno specifico intervallo, se la risorsa richiesta non è disponibile, il processo concluda in maniera autonoma "gracefully", in gergo.
Ti ringrazieranno in molti
Resta comunque il fatto che per killarlo, il metodo elettivo rimane quello che ti hanno già indicato. Accedi tramite consolle Bash e lo killi brutalmente con "kill -9".
Per il genere di lavoro che faccio, mi è capitato molto spesso che utenti lanciassero script in Python senza poi preoccuparsi di arrestarli o controllarli. Restavano appesi per delle ore in attesa che una tabella del DB diventasse disponibile e poi intervenivo io che li "brutalizzavo" .
Tutto questo per dire: se sviluppi questo genere di scriipt sarebbe utile che tui inserissi dei "kill switch", ovvero delle istruzioni che, trascorso uno specifico intervallo, se la risorsa richiesta non è disponibile, il processo concluda in maniera autonoma "gracefully", in gergo.
Ti ringrazieranno in molti
- omegaub
- Scoppiettante Seguace
- Messaggi: 342
- Iscrizione: martedì 2 dicembre 2008, 12:50
- Desktop: gnome
- Distribuzione: Ubuntu 18.04.4 LTS
- Sesso: Femminile
- Località: Boschi romani
Re: Come vedere se script python è in esecuzione
Grazie a tutti per le risposte, le ho provate tutte ma non mi hanno aiutata. Ho avviato lo script da browser gestito tramite flask ma l'unico risultato che ho ottenuto dai comandi utilizzati è ... flask run 0.0.0.0.
Mi serve anche per capire se chiudendo il tab si interrompe o meno lo script
Potrei forse utilizzare soluzioni basate sui socket?
Mi serve anche per capire se chiudendo il tab si interrompe o meno lo script
Potrei forse utilizzare soluzioni basate sui socket?
-
- Imperturbabile Insigne
- Messaggi: 2842
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Come vedere se script python è in esecuzione
come posso vedere da sistema operativo se quel determinato script è in esecuzione?
Codice: Seleziona tutto
pgrep -f "intera linea di comando che lancia gli script racchiusa tra apici"
Imparerò volentieri se qualcuno mi spiega un altro modo. Io sfrutterei sempre pgrep, lanciando gli script in modo programmaticamente diverso a seconda delle istanze:E c'è un modo per vedere se è stato attivato dal cron o da sito web?
per es. da cron, invece di lanciarlo come un eseguibile, potresti fare
Codice: Seleziona tutto
python nomescript
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Come vedere se script python è in esecuzione
Quando lanci lo script, memorizza il pid del processo, chi lo ha lanciato e il comando su un file testuale in /tmp (lo fai direttamente in Python). Ricordati di usare atexit per eliminare il record dal file quando il programma finisce.
Quindi, da sistema operativo ti leggi direttamente il contenuto del file e hai risolto.
Quindi, da sistema operativo ti leggi direttamente il contenuto del file e hai risolto.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- omegaub
- Scoppiettante Seguace
- Messaggi: 342
- Iscrizione: martedì 2 dicembre 2008, 12:50
- Desktop: gnome
- Distribuzione: Ubuntu 18.04.4 LTS
- Sesso: Femminile
- Località: Boschi romani
Re: Come vedere se script python è in esecuzione
Ciao a tutti!
Ho notato che gli script che lancio da riga di comando risultano con i vari comandi che avete suggerito ma quelli avviati tramite flask non riesco proprio ad individuarli, qual è il processo padre in questo caso? Come si chiama?
Anche la soluzione di vaeVictis mi sembra piuttosto geniale ma non saprei come fare, nel senso, che librerie e come dovrei utilizzarle per mettere in atto tale soluzione? Tipo os?
Ho notato che gli script che lancio da riga di comando risultano con i vari comandi che avete suggerito ma quelli avviati tramite flask non riesco proprio ad individuarli, qual è il processo padre in questo caso? Come si chiama?
Anche la soluzione di vaeVictis mi sembra piuttosto geniale ma non saprei come fare, nel senso, che librerie e come dovrei utilizzarle per mettere in atto tale soluzione? Tipo os?
- thece
- Tenace Tecnocrate
- Messaggi: 12943
- Iscrizione: lunedì 23 aprile 2007, 14:16
- Distribuzione: Debian 12 (Bookworm) - KDE
Re: Come vedere se script python è in esecuzione
perchè non far fare al tuo script un pò di log? Tipo
myScript.py
Codice: Seleziona tutto
#!/usr/bin/python3
from datetime import datetime;
import os;
import subprocess;
import sys;
import time;
def main():
try:
pid = os.getpid();
ppid = os.getppid();
timestamp = datetime.now();
logFile = open("/tmp/myScript_" + str(ppid) + "_" + timestamp.strftime("%Y%m%d%H%M%S") + ".log", "w");
curProcess = subprocess.Popen("/usr/bin/ps | grep " + str(pid), shell = True, stdout = subprocess.PIPE);
curOutput = curProcess.stdout.read();
prntProcess = subprocess.Popen("/usr/bin/ps | grep " + str(ppid), shell = True, stdout = subprocess.PIPE);
prntOutput = prntProcess.stdout.read();
logMessage = "[+] PID: " + str(pid);
print(logMessage);
logFile.write(logMessage + "\n");
logMessage = "[+] Current Process: " + curOutput.decode();
print(logMessage);
logFile.write(logMessage + "\n");
logMessage = "[+] PPID: " + str(ppid);
print(logMessage);
logFile.write(logMessage + "\n");
logMessage = "[+] Parent Process: " + prntOutput.decode();
print(logMessage);
logFile.write(logMessage + "\n");
for index in range(10):
timestamp = datetime.now();
logMessage = "[+] [" + timestamp.strftime("%d/%m/%Y %H:%M:%S") + "] I'm alive!";
print(logMessage);
logFile.write(logMessage + "\n");
time.sleep(1);
logFile.close();
sys.exit();
except Exception as exception:
print("[-] Something went wrong ...");
print("[-] Exception:", str(exception));
sys.exit();
if (__name__ == "__main__"):
main()
- PID del processo corrente
- nome del processo corrente
- PID del processo padre
- nome del processo padre
- se il processo è vivo
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Come vedere se script python è in esecuzione
Suggerirei di strutturare le informazioni stampate in qualche formato, per esempio JSON, di modo che sia più semplice l'acquisizione.
Edit:
Ho visto ora il messaggio dell'op precedente a quello a cui ho risposto. Appena ho modo ti mostro una soluzione. Non ho un PC sotto mano, quindi appena ne ho uno o trovo un interprete online che abbia tutte le librerie.
Comunque, a meno che non mi sfugga qualcosa, come fare è già spiegato nel messaggio precedente, con le due righe
Io avrei suggerimenti e considerazioni. Li faccio 'asap'.
Tornando in tema, analogamente in bash hai la variabile $$, che contiene il PID del processo associato allo script stesso. In bash (e analogamente in altre Shell) hai anche la variabile $?, Che contiene il PID dell'ultimo processo lanciato. Può essere utile ovviamente per memorizzare il PID e successivamente monitorare il processo, sia dalla stessa shell sia dall'interno di uno script (per intenderci, nello script lanci un processo, subito dopo memorizzi il valore di $? e così hai il PID di quel processo per poterlo monitorare/controllare per quanto permette il sistema operativo).
Post Edit:
I suggerimenti che avrei riguardano il file di log/output su cui vai a registrare i dati. Nell'ipotesi che il tuo programma crashi, i dati restano su quel file e di conseguenza a un successivo controllo quel processo risulterebbe attivo. Pertanto, sarebbe opportuno predisporre una procedura per cancellare il record inserito (possibilmente seguendo qualche tipo di formattazione, come ad esempio JSON). La procedura per la cancellazione del record non è spiegata nel precedente messaggio, ma corrisponde alla cancellazione di righe da un file ed è abbastanza triviale.
Questa procedura verrebbe poi chiamata al bisogno ma andrebbe anche associata a una trap dei segnali "adeguati", dove per "adeguati" si intende tutti quei segnali che causerebbero la terminazione del programma. Si trovano pacchi di informazioni riguardo questa procedura su Google. Qui ad esempio hai una discussione riguardo SIGINT. Un'altra opzione per lanciare procedure di clean up all'uscita di un programma è l'utilizzo di atexit.
In caso ci fossero dubbi, chiedi pure.
Edit:
Ho visto ora il messaggio dell'op precedente a quello a cui ho risposto. Appena ho modo ti mostro una soluzione. Non ho un PC sotto mano, quindi appena ne ho uno o trovo un interprete online che abbia tutte le librerie.
Comunque, a meno che non mi sfugga qualcosa, come fare è già spiegato nel messaggio precedente, con le due righe
Codice: Seleziona tutto
pid = os.getpid();
ppid = os.getppid();
Tornando in tema, analogamente in bash hai la variabile $$, che contiene il PID del processo associato allo script stesso. In bash (e analogamente in altre Shell) hai anche la variabile $?, Che contiene il PID dell'ultimo processo lanciato. Può essere utile ovviamente per memorizzare il PID e successivamente monitorare il processo, sia dalla stessa shell sia dall'interno di uno script (per intenderci, nello script lanci un processo, subito dopo memorizzi il valore di $? e così hai il PID di quel processo per poterlo monitorare/controllare per quanto permette il sistema operativo).
Post Edit:
I suggerimenti che avrei riguardano il file di log/output su cui vai a registrare i dati. Nell'ipotesi che il tuo programma crashi, i dati restano su quel file e di conseguenza a un successivo controllo quel processo risulterebbe attivo. Pertanto, sarebbe opportuno predisporre una procedura per cancellare il record inserito (possibilmente seguendo qualche tipo di formattazione, come ad esempio JSON). La procedura per la cancellazione del record non è spiegata nel precedente messaggio, ma corrisponde alla cancellazione di righe da un file ed è abbastanza triviale.
Questa procedura verrebbe poi chiamata al bisogno ma andrebbe anche associata a una trap dei segnali "adeguati", dove per "adeguati" si intende tutti quei segnali che causerebbero la terminazione del programma. Si trovano pacchi di informazioni riguardo questa procedura su Google. Qui ad esempio hai una discussione riguardo SIGINT. Un'altra opzione per lanciare procedure di clean up all'uscita di un programma è l'utilizzo di atexit.
In caso ci fossero dubbi, chiedi pure.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Come vedere se script python è in esecuzione
Ah, mi sono dimenticato una cosa. Ovviamente ci sono tutti i problemi che l'aggiornamento concorrente di un file testuale comportano.
Detto in breve, se un processo sta gia' scrivendo sul file le sue informazioni, puo' capitare che un altro processo (in questo caso proprio un altro programma) abbia la stessa esigenza in modo concorrente, quindi questo aspetto va gestito onde evitare di avere gli output scritti sul file coi noti problemi a questa procedura associati (output scritto a cazzo di cane, con conseguente necessita' di chiamare uno sciamano per fargli stampare il file in formato pdf, dargli fuoco, spargere le ceneri in una tazza in cui e' stato precedentemente versato il sangue di un SE junior, in caso l'azienda non disponga di uno stagista, e scrutinare il tutto per trarne un senso quando i corvi volano a non piu' di venticinque gradi rispetto all'orizzonte, per poi rendersi conto che tutto questo non serve a una megamazza e quindi dedicare le proprie attenzioni alla manager delle risorse umane dell'ufficio vicino).
I modi per risolverlo sono parecchi, ma ti lascio con la grande fortuna di poter cercare quello che piu' ti aggrada. Ora che fa caldo ne puoi approfittare, se ti invitano a prendere un aperitivo nella spiaggia piu' vicina acchittata come un ritrovo di macachi (a me non capita, ma ho sentito che qualche amico viene ancora coinvolto), puoi sempre rispondere che sei impegnato in ricerca e sviluppo.
Detto in breve, se un processo sta gia' scrivendo sul file le sue informazioni, puo' capitare che un altro processo (in questo caso proprio un altro programma) abbia la stessa esigenza in modo concorrente, quindi questo aspetto va gestito onde evitare di avere gli output scritti sul file coi noti problemi a questa procedura associati (output scritto a cazzo di cane, con conseguente necessita' di chiamare uno sciamano per fargli stampare il file in formato pdf, dargli fuoco, spargere le ceneri in una tazza in cui e' stato precedentemente versato il sangue di un SE junior, in caso l'azienda non disponga di uno stagista, e scrutinare il tutto per trarne un senso quando i corvi volano a non piu' di venticinque gradi rispetto all'orizzonte, per poi rendersi conto che tutto questo non serve a una megamazza e quindi dedicare le proprie attenzioni alla manager delle risorse umane dell'ufficio vicino).
I modi per risolverlo sono parecchi, ma ti lascio con la grande fortuna di poter cercare quello che piu' ti aggrada. Ora che fa caldo ne puoi approfittare, se ti invitano a prendere un aperitivo nella spiaggia piu' vicina acchittata come un ritrovo di macachi (a me non capita, ma ho sentito che qualche amico viene ancora coinvolto), puoi sempre rispondere che sei impegnato in ricerca e sviluppo.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 6 ospiti