(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
tmuxescreen:-
tmux– multiplexer di terminali:consente di creare, accedere e controllare più terminali da un'unica schermata.tmuxpuò 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 anohupma è 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
huponexitOpzione Bash:$ ./script.py > output.txt & [1] 7461 $ shopt -s huponexit $ exitRiferimento:
- Come utilizzare Job Control di Bash per gestire i processi in primo piano e in background su DigitalOcean
-
Usa i gestori di pianificazione come
atecrontab:-
at– eseguire i comandi in un secondo momento;atebatchleggere 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?