2009-12-11 14 views
5

मैं निम्नलिखित स्क्रिप्ट है:ssh दूरस्थ कमांड निष्पादन और ulimit

cat > /tmp/script.sh <<EndOfScript 
#!/bin/sh 
ulimit -n 8192 
run_app 
EndOfScript 

जो सुचारू रूप से स्थानीय स्तर पर चलाता है, यह हमेशा ठीक है। लेकिन अगर मैं ssh के माध्यम से दूरस्थ रूप से चलाने का प्रयास:

scp /tmp/script.sh [email protected]:/tmp/script.sh 
ssh [email protected] "chmod 755 /tmp/script.sh; /tmp/script.sh" 

मैं त्रुटि मिली:

ssh [email protected] "ulimit -n 8192" 

एक ही त्रुटि:

ulimit: open files: cannot modify limit: Operation not permitted 

मैं भी निम्न आदेश की कोशिश की।

ऐसा लगता है कि एसएसएच रिमोट कमांड निष्पादन नोफाइल सीमा पर 1024 हार्ड सीमा लागू कर रहा है, लेकिन मुझे यह नहीं पता कि इस डिफ़ॉल्ट मान को कैसे संशोधित किया जाए। मैंने /etc/security/limits.conf को संशोधित करने और sshd को पुनरारंभ करने का प्रयास किया, फिर भी वही त्रुटि।

+1

अंत में मैं सही जवाब मिला: ulimit -c असीमित ulimit -HSn 65535 # कार्यक्रम निष्पादित करें: करने के लिए// initscript आदि निम्नलिखित जोड़ें। eval exec "$ 4" –

उत्तर

3

Fiannly पता लगा जवाब:/आदि के लिए निम्न/जोड़ने initscript

ulimit -c unlimited 
ulimit -HSn 65535 
# Execute the program. 
eval exec "$4" 
+0

इसके लिए धन्यवाद। अजीब बात यह है कि मैं विकल्पों को नहीं ढूंढ सकता- एच और -एस उलमिट मैन पेज पर। – smartnut007

2

ulimit को चलाने के लिए सुपरसुर विशेषाधिकारों की आवश्यकता है।

मैं आपको सर्वर प्रशासक से उस सर्वर पर उस मान को संशोधित करने के लिए कहूंगा जिसे आप स्क्रिप्ट चलाने की कोशिश कर रहे हैं।

वह लिनक्स पर /etc/secutiry/limits.conf को संशोधित करके ऐसा कर सकता है। यहां एक उदाहरण दिया गया है जो मदद कर सकता है:

*    soft nofile   8192 
*    hard nofile   8192 

उसके बाद, आपको sshd को पुनरारंभ करने की आवश्यकता नहीं है। बस लॉगआउट करें और फिर से लॉगिन करें।

मैं आपको सलाह देता हूं कि आप उसी प्रश्न को ServerFault में पूछें। आपको वहां बेहतर सर्वर-साइड संबंधित उत्तर मिलेंगे।

+1

मैंने /etc/security/limits.conf को संशोधित किया, sshd को पुनरारंभ किया, मशीन को पुनरारंभ भी किया। अभी भी 1024 से अधिक की एक नरम सीमा नहीं मिल सकती है। –

+0

क्या आप अपनी सीमा.conf में प्रासंगिक रेखा पोस्ट कर सकते हैं? इसमें एक त्रुटि हो सकती है।ध्यान रखें कि एसएसडीडी प्रक्रिया को इसके लिए अल्लिमिट लागू करने की आवश्यकता है, इसलिए जांच करें कि इसकी स्टार्टअप स्क्रिप्ट आदि में उलिमिट की कोई सेटिंग नहीं है या नहीं। – wds

+0

मैंने जो जोड़ा आप जवाब देना चाहते हैं। –

0

ulimit पर कॉल के लिए स्टार्ट अप स्क्रिप्ट (/etc/profile, ~/.??*) की जांच करें। आईआईआरसी, एक बार सीमा लागू हो जाने के बाद, इसे अब और बढ़ाया नहीं जा सकता है।

+0

क्या पुनरारंभ करना सीमा को रीसेट कर देगा? – mcandre

+0

केवल तभी जब 'ulimit' कमांड स्टार्टअप के दौरान निष्पादित नहीं किया जाता है। यदि आप एक नई खोल विंडो बनाते हैं, तो 'ulimit' केवल इस शैल और सभी बच्चों के लिए सक्रिय है। इस मामले में, एक नई खोल विंडो शुरू करने से पहले से ही सीमा के बिना सत्र बनाता है। यह 'ulimit' स्टार्टअप स्क्रिप्ट में है, आप कुछ भी करने से पहले सभी गोले प्रभावित होते हैं, इसलिए पुनरारंभ करने में कोई मदद नहीं करेगा। आपको पहले कमांड को अक्षम करना होगा। –

11

के बजाय /etc/initscript के वैकल्पिक हल का उपयोग कर (और उस फ़ाइल को लिखने में कोई गलती नहीं बनाते हैं .. :), अगर आप सिर्फ में बनाए गए सेटिंग्स का सम्मान करने के लिए sshd चाहते हैं, आपको यह सुनिश्चित करना चाहिए कि UsePAM yes/etc/ssh/sshd_config में /etc/pam.d/sshd सूचियां session required pam_limits.so (या अन्यथा ऐसा करने वाली कोई अन्य फ़ाइल शामिल है)।

यह सब कुछ होना चाहिए।

पुराने संस्करणों में od openssh (< 3.6 कुछ) में उपयोग करने के लिए समस्या भी थी, जिसने सीमाओं को सम्मानित किया, लेकिन इसे नए संस्करणों में तय किया गया।

+1

उन पंक्तियों के लिए दोनों फाइलों की जांच की और वे मौजूद थे। OpenSSH_5.8p1 डेबियन -7ubuntu1, ओपनएसएसएल 1.0.0e 6 सितंबर 2011 को चल रहा है। अभी भी ओपी के समान समस्या: | – kellogs

+0

मैं अब उम्र के लिए जानकारी के इस टुकड़े की तलाश कर रहा हूं - धन्यवाद! –

+0

मैं अब दिनों के लिए अलग-अलग फ़िक्स खोज रहा हूं और कोशिश कर रहा हूं और/etc/ssh/sshd_config में "UsePAM yes" ठीक वही है जो मैं खो रहा था। आपको बहुत - बहुत धन्यवाद! –