¿Puedo redirigir la salida a un archivo de registro y realizar un proceso en segundo plano al mismo tiempo?
En otras palabras, ¿puedo hacer algo como esto?
nohup java -jar myProgram.jar 2>&1 > output.log &
¿O no es un comando legal? O, ¿necesito moverlo manualmente al fondo, así:
java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1
bash
shell
shell-script
djangofan
fuente
fuente
2>$1
probablemente se supone que es2>&1
.Respuestas:
Un problema con su primer comando es que redirige stderr a donde está stdout (si cambió $ a a & como se sugiere en el comentario) y luego redirige stdout a algún archivo de registro, pero eso no arrastra el stderr redirigido . Debe hacerlo en el otro orden, primero envíe stdout a donde desea que vaya y luego envíe stderr a la dirección stdout está en
y luego podrías lanzar el & para enviarlo a un segundo plano. Se puede acceder a los trabajos con el
jobs
comando.jobs
le mostrará los trabajos en ejecución y los numerará. A continuación, puede hablar sobre los trabajos utilizando un% seguido de un número similarkill %1
.Además, sin el & en el extremo con el que puede suspender el comando Ctrlz, use el
bg
comando para ponerlo en segundo plano yfg
volver a ponerlo en primer plano. En combinación con eljobs
comando, esto es poderoso.para aclarar la parte anterior sobre el orden en que escribe los comandos. Supongamos que stderr es la dirección 1002, stdout es la dirección 1001 y el archivo es 1008. El comando se lee de izquierda a derecha, por lo que lo primero que ve en el suyo es
2>&1
quién mueve stderr a la dirección 1001, luego ve> file
qué se mueve stdout a 1008, pero mantiene stderr en 1001. No extrae todo lo que apunta a 1001 y lo mueve a 1008, sino que simplemente hace referencia a stdout y lo mueve al archivo.Al revés, mueve stdout a 1008, y luego mueve stderr al punto al que apunta stdout, 1008 también. De esta manera, ambos pueden apuntar al archivo único.
fuente
$!
&> file.out
para redirigir stdin y stdout a un archivo de salida, lo que reduce la posibilidad de un error al colocar2>&1
el lugar incorrecto en su línea de comando.Parar
<Ctrl+Z>
y continuar en segundo plano conbg
es equivalente a ejecutar con&
al final del comando.Entonces, para ejecutar en segundo plano y redirigir la salida:
Si también necesita que este comando no muera cuando salga de la terminal, entonces debe usar
nohup
fuente
&
bg
, puede separarlo de su sesión ejecutandodisown
, lo que hace que el proceso no muera cuando cierra el terminal.Tenga en cuenta que
&>
dirige tanto stdout como stderr a output.logfuente
En lugar de usar nohup, puede usar la pantalla. Puede ver el estado del programa en tiempo real. Incluso puede registrar toda la salida en un archivo. Es útil cuando accede al servidor a través de ssh donde se cierra la sesión debido a una mala conexión o inactividad. Después de iniciar sesión, puede continuar el trabajo desde donde lo dejó. Consulte esto y esto para saber en detalle.
fuente
El
tee
comando también es bastante frecuente.nohup java -jar myProgram.jar | tee output.log &
fuente