Команда nohup не может вывести вывод в nohup.out

Команда nohup не может вывести вывод в nohup.out

Я написал скрипт bash для выполнения моего jar-файла в среде Ubuntu или Red Hat. Вот мой скрипт bash

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


Мой скрипт bash выполнит jar, который я разработал, я надеюсь вывести вывод из jar-файла в nohup.outлюбой txt-файл, поэтому я могу легко отследить любую проблему, но, похоже, при выполнении скрипта ничего не выводится, он выводит весь вывод в терминале. Но когда я запускаю его nohup java -jar /home/chikin/Downloads/hardcoded.jar &напрямую из терминала, он может вывести весь вывод jar в nohup.out. Могу ли я узнать, почему мой скрипт не работает? Мой скрипт также не может запускаться каждый раз, когда я перезагружаю свою машину Ubuntu, я протестировал много решений, но ни одно из них не работает должным образом

решение1

Если вы не экспортировали значение nohupв среду скрипта (например export nohup=/usr/bin/nohup, ), то $nohupрезультатом будет пустая строка — отсюда и ваша команда

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

становится простым

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

так что nohupне вызывается вообще. Вы, вероятно, хотите

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

(без $).


Вероятно, лучше явно указать выходной файл:

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

поскольку, как отмечено в man-странице, правила для выходного файла зависят от того, является ли стандартный вывод терминалом или нет:

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

Связанный контент