web-dev-qa-db-fra.com

La commande nohup ne parvient pas à imprimer le résultat sur Nohup.out

J'ai écrit un script bash pour exécuter mon fichier jar dans un environnement Ubuntu ou Red Hat. Voici mon 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


Mon script bash exécute le fichier jar que j’ai développé. J’espère imprimer la sortie du fichier jar dans Nohup.out ou dans n’importe quel fichier txt, afin que je puisse facilement identifier tout problème, mais cela semble comme si rien n’imprimait quand j’exécutais le script, c’est l’impression de toutes les sorties dans le terminal. Mais lorsque j'exécute Nohup Java -jar /home/chikin/Downloads/hardcoded.jar & directement à partir du terminal, il est capable d'imprimer toutes les sorties du fichier jar dans Nohup.out. Puis-je savoir pourquoi mon script ne fonctionne pas? Mon script ne parvient pas non plus à se déclencher à chaque fois que je redémarre ma machine Ubuntu. J'ai testé de nombreuses solutions, mais aucune d'entre elles ne fonctionnait bien.

1
attack

Sauf si vous avez exporté la valeur de Nohup dans l'environnement du script (par exemple, export Nohup=/usr/bin/Nohup), alors $Nohup sera évalué à la chaîne vide - d'où votre commande

$Nohup Java -jar /home/chikin/Downloads/hardcoded.jar

devient simple

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

alors Nohup n'est pas appelé du tout. Vous voulez probablement

Nohup Java -jar /home/chikin/Downloads/hardcoded.jar & tail -f Nohup.out

(sans le $).


Il est probablement préférable de rendre le fichier de sortie explicite:

Nohup Java -jar /home/chikin/Downloads/hardcoded.jar > Nohup.out & tail -f Nohup.out

comme indiqué dans la page de manuel, les règles pour le fichier de sortie dépendent du fait que la sortie standard soit un terminal ou non:

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