2009-06-25 11 views
5

मैं पृष्ठभूमि में एक दूरस्थ मशीन पर एक नौकरी लॉन्च करने और इसकी पीआईडी ​​प्राप्त करने की कोशिश कर रहा हूं ताकि मैं इसे बाद में मार सकूं। जो मैंने अभी तक किया है वह निम्नलिखित है:पृष्ठभूमि में लॉन्च की गई नौकरी की पिड प्राप्त करना

#!/bin/bash 

IP=xxx.xxx.xxx.xx 
REMOTE_EXEC="ssh $IP -l root" 

# The following does NOT work, I am trying to get the PID of the remote job 
PID=`$REMOTE_EXEC 'vmstat 1 1000 > vmstat.log & ; echo $!'` 

# Launch apache benchmark 
ab -n 10 http://$IP/ 

$REMOTE_EXEC "kill $PID" 

दुर्भाग्यवश यह काम नहीं करता है। मुझे

bash: syntax error near unexpected token `;' 

लेकिन मुझे नहीं पता कि सही वाक्यविन्यास क्या होगा।

+0

: 'vmstat 1 1000> vmstat.log और; echo $! ' स्थानीय रूप से भी नहीं है। इस पर एक नज़र मारो। –

+0

हाँ मुझे पता है। तो मुझे या तो 'vmstat 1 1000> vmstat.log और' के लिए एक फिक्स की आवश्यकता है; echo $! ' या मुझे किसी अन्य तंत्र के माध्यम से रिमोट जॉब की पीआईडी ​​प्राप्त करने की आवश्यकता है। – davitenio

+0

@davitenio स्थानीय ssh कमांड के पीआईडी ​​के रूप में समाप्त नहीं होता है, रिमोट vmstat कमांड नहीं? –

उत्तर

3

आपको त्रुटि मिली, क्योंकि आप ';' अनावश्यक है, 'vmstat 1 1000> vmstat.log & echo $!' का प्रयास करें

लेकिन मुझे यकीन नहीं है कि यह काम करेगा, क्योंकि लॉगआउट करने के बाद, प्रक्रिया SIGHUP प्राप्त होगी। नोहुप (1) देखें।

+0

यह नोहप का उपयोग किए बिना भी काम करता है। धन्यवाद! – davitenio

+0

हाँ, आप सही हैं ... हो सकता है, ऐसा होता है, क्योंकि इस मामले में ssh आपको "लॉगिन" नहीं करता है (ssh (1) से: "अगर आदेश निर्दिष्ट है, तो इसे दूरस्थ होस्ट पर निष्पादित किया जाता है लॉगिन खोल। ")। – dmitri

2

घुंघराले ब्रेसिज़ में backgrounded आदेश आसपास के प्रयास:

PID=`$REMOTE_EXEC '{ vmstat 1 1000 > vmstat.log & }; echo $!'` 
0

मामले में आप कमजोर हवाले से उपयोग करते हैं, आप $ से बचने के लिए की जरूरत है! जैसे निम्नलिखित:

$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \$!" 

या

P=`$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \\\$!"` 
सीधे शब्दों में
+0

मैं -bash हो रही है:! ": घटना ssh मेजबान के साथ नहीं मिला" {निष्पादन & }; \ $ गूंज " –

+0

यह अपने ओएस पर निर्भर हो सकता है यह पूरी तरह से उबंटू 12 पर काम करता है और उच्च आप उपयोग कर रहे हैं।। कमजोर उद्धरण, बचने की कोशिश करें! यहां वर्णित प्रतीक भी http://serverfault.com/questions/208265/what-is-bash-event-not-उंड या कमजोर उद्धरण का उपयोग न करें। – Rom098

+0

मुझे समस्या मिली - यह क्या वह "इतिहास विस्तार" सक्षम था। अगर मैंने उस पंक्ति को एक स्क्रिप्ट के अंदर उपयोग किया, तो यह सही ढंग से काम करता था, लेकिन अगर मैं इसे सीधे टर्मिनल से चलाता हूं, तो यह असफल रहा। अगर मैं 'सेट + एच' के साथ इतिहास विस्तार बंद कर देता हूं, तो यह टर्मिनल से ठीक से काम करता है। –

संबंधित मुद्दे