Ripristina uno script in esecuzione da una sessione terminale


35

Quindi sto usando GNU Screen per gestire più script / programmi in esecuzione. Il multiplexing e la staccabilità sono piuttosto utili.

Ho rimosso uno script dal disco e ora ho qualche problema a trovare il backup. Tuttavia, una delle sessioni del terminale stava eseguendo lo script prima che il file fosse cancellato e continuasse a funzionare bene.

C'è un modo per dirottare la sessione terminale che sta attualmente eseguendo lo script per recuperare il contenuto di questo file?


Risposte:


61

cerca il pid dello script usando ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

controllare /proc/$PID/fd/; dovrebbe esserci un collegamento interrotto al file di script, ma cat dovrebbe funzionare (mentre lo script è in esecuzione!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

in bocca al lupo!


@mrc Penso che il lavoro, perché il contenuto dei file, è caricato in memoria
c4f4t0r

Ottimo consiglio! È anche un avvertimento che @fdo ha bisogno di impostare una routine di backup decente, perché la prossima volta potrebbe non essere così fortunato.
Criggie

12
@ c4f4t0r Niente a che vedere con il suo caricamento in memoria o meno. Linux non rimuoverà esplicitamente un file (inode) mentre ci sono handle aperti: il file rimane sul disco, occupando spazio. rme altri strumenti scollegano il file, rimuovendo il collegamento dal nome del file ai dati effettivi (referenziati dall'inode), ma finché esiste un riferimento (hard link o handle aperto) l'inode non viene cancellato.
Bob,

Solo curioso ... come hai saputo controllare fd 255? O è solo un esempio?
gardenhead,

2
@gardenhead È un esempio.
user253751
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.