(14 risposte)
Chiuso 3 anni fa.
Ho uno script python chiamato scrape.py
. Come suggerisce il nome, è un web crawler e voglio che funzioni continuamente sulla mia macchina Linux anche dopo che mi sono disconnesso e ho terminato la sessione ssh. Ho letto molto da queste parti e ci sono stati molti suggerimenti sull'utilizzo di nohup python scrape.py &
. Ha funzionato bene ma l'esecuzione dello script si è interrotta non appena mi sono disconnesso. Ho anche esplorato il supervisor
applicazione ma non ho i permessi di root, quindi fallisce anche lui. Potete suggerirmi un modo per risolvere questo problema? Grazie.
Migliore risposta
Esistono diversi approcci (strumenti e comandi) che puoi utilizzare per scopi simili:
-
Usa gli emulatori di terminale come
tmux
escreen
:-
tmux
– multiplexer di terminali:consente di creare, accedere e controllare più terminali da un'unica schermata.tmux
può essere staccato da uno schermo e continuare a funzionare in background, quindi ricollegato. Esempi del suo utilizzo di base sono forniti qui e qui. -
screen
– screen manager con emulazione terminale VT100/ANSI. È un gestore di finestre a schermo intero che esegue il multiplexing di un terminale fisico tra diversi processi (tipicamente shell interattive)... I programmi continuano a essere eseguiti quando la loro finestra non è attualmente visibile e anche quando l'intera sessione dello schermo è scollegata dal terminale dell'utente. Un esempio di utilizzo è fornito qui.
-
-
Usa comandi distaccati eseguiti in background (leggi anche):
-
nohup
– eseguire un comando immune ai riattacchi, con output su un non-tty; Esegui COMMAND, ignorando i segnali di riaggancio. La sintassi comune per inviare un comando in background e staccarlo dalla sessione della shell corrente:nohup COMMAND &
onohup COMMAND >/dev/null 2>&1 &
se vuoi sospendere l'info-file creato danohup
. Esempi del suo utilizzo di base sono forniti qui e qui. Anche qui viene mostrato come usarlo tramite il comando ssh. -
disown
– simile anohup
ma è integrato nella shell (zsh, ksh, bash); utilizzato per rimuovere i lavori dalla tabella dei lavori o per contrassegnare i lavori in modo che non venga inviato loro un segnale SIGHUP se la shell padre lo riceve (ad esempio se l'utente si disconnette). Un esempio di utilizzo è fornito qui. -
setsid
– crea una sessione e imposta l'ID del gruppo di processi. Esempio di utilizzosetsid "COMMAND"
. Altri esempi qui.
-
-
Usa
huponexit
Opzione Bash:$ ./script.py > output.txt & [1] 7461 $ shopt -s huponexit $ exit
Riferimento:
- Come utilizzare Job Control di Bash per gestire i processi in primo piano e in background su DigitalOcean
-
Usa i gestori di pianificazione come
at
ecrontab
:-
at
– eseguire i comandi in un secondo momento;at
ebatch
leggere i comandi dallo standard input o da un file specificato che devono essere eseguiti in un secondo momento, utilizzando/bin/sh
. Esempio di utilizzo:echo "COMMAND" | at now + 1 minute
. Altri esempi qui. -
crontab
– programmare il lavoro di base periodico; è noto per altri scopi, ma puoi specificare un determinato momento in cui il tuo comando verrà eseguito solo una volta. Qui viene fornito un bel calcolatore crontab.
-
-
Crea il servizio di sistema e avvialo, vedi:
- Come faccio a eseguire un singolo comando all'avvio utilizzando systemd?
- Come eseguire gli script all'avvio?