www tradusir traductor traducir spanishdict oraciones online introductor inglés ingles gratis frases español convertidor como perl scripting ssh tail netcat

perl - traductor - tradusir en ingles



¿Cómo puedo alinear un archivo remoto? (8)

Estoy tratando de encontrar una buena forma de alinear un archivo en un host remoto. Esto es en una red interna de máquinas Linux. Los requisitos son:

  1. Debe comportarse bien (sin proceso adicional, o producción continua)

  2. No se puede requerir el módulo de Perl de una mascota.

  3. Se puede invocar a través de Perl.

  4. Si es posible, no requiere una secuencia de comandos o utilidad personalizada en la máquina remota (las utilidades normales de Linux están bien)

Las soluciones que he probado son generalmente de este tipo

ssh remotemachine -f <some command>

"algún comando" ha sido:

tail -f logfile

La cola básica no funciona porque el proceso remoto continúa escribiendo salida en el terminal después de que el proceso ssh local muere.

$socket = IO:Socket::INET->new(...); $pid = fork(); if(!$pid) { exec("ssh $host -f ''<script which connects to socket and writes>''"); exit; } $client = $socket->accept; while(<$client>) { print $_; }

Esto funciona mejor porque no hay salida a la pantalla después de que sale el proceso local, pero el proceso remoto no se da cuenta de que su socket está inactivo y permanece indefinidamente.


Alguien sugirió usar nc (netcat). Esta solución funciona, pero es menos ideal que simplemente usar ssh -t. El mayor problema es que debe usar nc en ambos lados de la conexión y necesita hacer algún descubrimiento de puerto en la máquina local para encontrar un puerto adecuado sobre el que conectarse. Aquí está la adaptación del código anterior para usar netcat:

$pid = fork(); if(!$pid) { exec("ssh $host -f ''tail -f $filename |nc $localhost $port''"); exit; } exec("nc -l -p $port");


Algunas ideas:

  • Puede montarlo sobre NFS o CIFS, y luego usar File::Tail .
  • Puede usar uno de los módulos SSH de Perl (hay varios de ellos), combinados con tail -f .

Has probado

ssh -t remotemachine <some command>

-t opción de la página man de ssh:

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

en lugar de

-f Requests ssh to go to background just before command execution. This is useful if ssh is going to ask for passwords or passphrases, but the user wants it in the background. This implies -n. The recommended way to start X11 programs at a remote site is with something like ssh -f host xterm.



Puede rastrear archivos de forma remota utilizando bash y rsync. La siguiente secuencia de comandos se toma de este tutorial: Tail files de forma remota con bash y rsync

#!/bin/bash #Code Snippet from and copyright by sshadmincontrol.com #You may use this code freely as long as you keep this notice. PIDHOME=/a_place/to/store/flag/file FILE=`echo ${0} | sed ''s:.*/::''` RUNFILEFLAG=${PIDHOME}/${FILE}.running if [ -e $RUNFILEFLAG ]; then echo "Already running ${RUNFILEFLAG}" exit 1 else touch ${RUNFILEFLAG} fi hostname=$1 #host name to remotlely access log_dir=$2 #log directory on the remotehost log_file=$3 #remote log file name username=$3 #username to use to access remote host log_base=$4 #where to save the log locally ORIGLOG="$log_base/$hostname/${log_file}.orig" INTERLOG="$log_base/$hostname/${log_file}.inter" FINALLOG="$log_base/$hostname/${log_file}.log" rsync -q -e ssh $username@$hostname:$log_dir/$log_file ${ORIGLOG} grep -Ev ".ico|.jpg|.gif|.png|.css" > ${INTERLOG} if [ ! -e $FINALLOG ]; then cp ${INTERLOG} ${FINALLOG} else LINE=`tail -1 ${FINALLOG}` grep -F "$LINE" -A 999999999 ${INTERLOG} / | grep -Fv "$LINE" >> ${FINALLOG} fi rm ${RUNFILEFLAG} exit 0


Sin embargo, puedes probar Survlog Its OS X.


netcat debería hacerlo por usted.


rsync: // [USER @] HOST [: PORT] / SRC ... [DEST] | cola [DEST]?