2012-03-22 6 views
0

J'essaie de connecter le serveur ssh distant via ruby ​​en utilisant Net :: SSH.Il fonctionne très bien pour moi pour toutes les commandes fournies via script et je pourrais lire la sortie de la commande avec succès. Mais quand j'utilise la commande ci-dessous, il est coincé dans SSH.exec! (Cmd) et le contrôle n'est pas retourné par la ligne. Uniquement si i cliquez sur Ctrl + c dans la ligne de commande, le script se termine. La commande est ./wcsadmin.sh start -> il est utilisé pour démarrer les processus de ma application serveur distantL'exécution de la commande SSH à distance se bloque dans ruby ​​en utilisant Net :: SSH pour une commande particulière

S'il vous plaît trouver l'extrait de code ci-dessous de mon script Ruby:

Net::SSH.start(host, username, :password => password) do |ssh| 
puts 'before exit' 
output = ssh.exec!(/opt/wcsadmin.sh start) 
puts 'Executed command' 

Le sortie de la commande quand je le fais manuellement:

[racine bin test @] # ./wcsadmin.sh commencer

système de contrôle du réseau ... à partir

Cela peut prendre quelques minutes ... stty: entrée standard: Invalid argument

système de contrôle du réseau a démarré avec succès.

Lancement du démon SAM ... Terminé. Démarrage démon DA ... À partir syslog DA démon ... Début

si j'utilise ssh.exec ('./ wcsadmin.sh start'), la seule différence est la ci-dessus la sortie est imprimée mais toujours se le programme n'est jamais terminé.I besoin de terminer manuellement en appuyant sur ctrl + c. Quand je cherchai dans google i pu trouver, vous pouvez utiliser

commande nohup ('nohup /opt/wcsadmin.sh start> /tmp/teststartserver.log 2> & 1')

à sauter les signaux de raccrochage et essayé la même chose.Cela écrit également la sortie à teststartserver.log mais se pendu.Peut-on m'aider s'il vous plaît sur cette question?

Merci à l'avance!

Merci, Meena

Répondre

0

Si la commande ne revient pas tout de suite, puis SSH.exec! bloquera l'exécution ultérieure jusqu'à ce que la commande retourne. Si, pour une raison quelconque, vous perdez le contact à distance, alors SSH.exec! peut ne pas savoir que vous avez perdu la connectivité et il continuera à bloquer.

Vous pouvez essayer de mettre la commande en arrière-plan:

output = ssh.exec!('/opt/wcsadmin.sh start &') 

Ou peut-être regarder la documentation sur cette commande et peut-être qu'il a une sorte d'option --no-wait qui lui permettra de revenir immédiatement, même si elle travaille toujours.

Questions connexes