L'exécution du script bash via java en arrière-plan après la connexion ssh est fermé

totothegreat:

J'utilise Java pour exécuter un script bash simple sur une machine Linux à distance.

Le script bash nommé "shortoracle.bash" ont ce script:

#!/bin/sh
runsql() {
   i="$1"
   end=$((SECONDS+360))
   SECONDS=0
   while (( SECONDS < end )); do
   echo "INSERT into table_$i (col1) values (CURRENT_TIMESTAMP);" | sqlplus username/password
   sleep 1
   done
}


for i in $(seq 1 10); do
 echo "DROP TABLE table_$i;" | sqlplus username/password
 echo "CREATE TABLE table_$i (col1 TIMESTAMP WITH TIME ZONE);" | sqlplus username/password
 runsql $i &
done
wait

En bref: créer 10 connexion parallèle exécuter des requêtes pour 360 secondes.

De mon programme java i exécutez la commande suivante:

sshconnection.execute("nohup su - oracle -c './shortoracle.bash'",2000);

Le ssh exécute avec succès le script.

Je veux, après un délai d'attente de 2 secondes (la deuxième param) de mettre fin à la connexion ssh, mais pour le script de continuer à fonctionner correctement en arrière-plan (donc le nohup, ce que je pensais), il ne se produit pas:

Au bout de 2 secondes quand je fin à la sshconnection, le programme bash arrête juste travailler:

  • Seulement 3 des 10 connexions sont ouvertes.

  • Pas plus inserts qui se passe.

Si je donne la connexion d'un délai plus long, tout va bien, mais je ne veux pas à cet égard raccrochera spécifique, je dois passer avec le programme.

Qu'est-ce que je fais mal ici?

Sven Hakvoort:

Vous devez ajouter &après votre commande, à savoir

sshconnection.execute("nohup su - oracle -c './shortoracle.bash' &",2000);

Depuis nohup lui - même autrement se déconnecter lorsque vous fermez la connexion SSH. Avec &vous exécutez « nohup » lui - même en arrière - plan et donc lui permettre de continuer à fonctionner après la fermeture de la connexion SSH.

Espérons que cela vous aide!

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=437791&siteId=1
conseillé
Classement