O comando nohup não consegue imprimir a saída em nohup.out

O comando nohup não consegue imprimir a saída em nohup.out

Eu escrevi um script bash para executar meu arquivo jar no ambiente Ubuntu ou Red Hat. Aqui está meu script bash

#!/bin/bash
JAVA_HOME=/usr/lib/java/jdk1.8.0_131
$nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out


Meu script bash executará o jar que desenvolvi, espero imprimir a saída do arquivo jar nohup.outou qualquer arquivo txt, para que eu possa rastrear qualquer problema facilmente, mas parece que não há impressão de nada quando executo o script , imprima toda a saída no terminal. Mas quando executo nohup java -jar /home/chikin/Downloads/hardcoded.jar &diretamente do terminal, ele é capaz de imprimir toda a saída do jar em nohup.out. Posso saber por que meu script não está funcionando? Meu script também não consegue ser acionado toda vez que eu reinicio minha máquina Ubuntu, testei muitas das soluções, mas nenhuma delas funcionou bem

Responder1

A menos que você tenha exportado o valor nohuppara o ambiente do script (por exemplo export nohup=/usr/bin/nohup), $nohupserá avaliado como uma string vazia - daí o seu comando

$nohup java -jar /home/chikin/Downloads/hardcoded.jar

fica claro

java -jar /home/chikin/Downloads/hardcoded.jar

então nohupnão está sendo invocado. Você provavelmente quer

nohup java -jar /home/chikin/Downloads/hardcoded.jar & tail -f nohup.out

(sem o $).


Provavelmente é melhor tornar o arquivo de saída explícito:

nohup java -jar /home/chikin/Downloads/hardcoded.jar > nohup.out & tail -f nohup.out

já que conforme observado na página de manual, as regras para o arquivo de saída dependem se a saída padrão é um terminal ou não:

If standard output is a terminal, append output to 'nohup.out' if  pos‐
sible,  '$HOME/nohup.out'  otherwise.  If standard error is a terminal,
redirect it to standard output.  To save output  to  FILE,  use  'nohup
COMMAND > FILE'.

informação relacionada