GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Continuare a eseguire un programma Python anche dopo aver disconnesso la sessione Ssh?

Questa domanda ha già risposte qui :Come mantenere i processi in esecuzione dopo la fine della sessione ssh?

(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:

  1. Usa gli emulatori di terminale come tmux e screen :

    • 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.

  2. 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 & o nohup COMMAND >/dev/null 2>&1 & se vuoi sospendere l'info-file creato da nohup . Esempi del suo utilizzo di base sono forniti qui e qui. Anche qui viene mostrato come usarlo tramite il comando ssh.

    • disown – simile a nohup 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 utilizzo setsid "COMMAND" . Altri esempi qui.

  3. 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
  4. Usa i gestori di pianificazione come at e crontab :

    • at – eseguire i comandi in un secondo momento; at e batch 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.

  5. 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?
Correlati:la politica di apt-cache richiede sudo?
Ubuntu
  1. 4 modi per mantenere un comando in esecuzione dopo esserti disconnesso dalla sessione SSH

  2. Ssh:mantieni i processi in esecuzione dopo la disconnessione della sessione Ssh?

  3. Ssh:come avviare un processo durante una sessione Ssh dopo che la sessione è terminata??

  4. Linux:smettere di guardare l'output di un particolare programma dopo aver utilizzato il comando Watch?

  5. Mantenere il server Ubuntu in esecuzione su un laptop con il coperchio chiuso?

Comando dello schermo Linux:mantieni i processi in esecuzione nonostante una connessione interrotta

Come mantenere aperto il terminale Gnome dopo la chiusura di un programma?

Come mantenere le sessioni SSH remote in esecuzione dopo la disconnessione

CentOS/RHEL – Come eseguire uno script o un comando quando un utente si disconnette dalla sessione ssh

Mantieni attiva la sessione SSH

Riprendi il comando in esecuzione nella sessione SSH interrotta