उपयुक्त-अद्यतन प्राप्त करें और स्वचालित और अप्राप्य को अपग्रेड करें


28

मेरे पास लगभग 7 डेबियन सर्वर हैं जिन्हें मैं प्रबंधित करता हूं, और मैं उन्हें खुद को अपडेट करने के लिए सेट करना चाहूंगा। इसलिए, मैंने एक स्क्रिप्ट बनाई जैसे:

#!/bin/sh
apt-get update
apt-get upgrade

और इसे rootकोंट्राब सूची में रखा। दुर्भाग्य से, यह हमेशा अपग्रेड अनुभाग पर लटका रहता है, यह पूछते हुए कि क्या मुझे यकीन है कि मैं अपग्रेड करना चाहता हूं। क्योंकि यह एक क्रॉन जॉब है, मैं आउटपुट को तब तक नहीं देखता जब तक कि यह मुझे ईमेल न कर दे कि यह विफल है। वहाँ एक रास्ता यह है कि शीघ्र छोड़ दिया है, और सिर्फ उन्नयन स्वचालित रूप से करते हैं?


3
... या क्रोन-एप्ट।
derobert

जवाबों:


46

उपयोग करने के लिए -y विकल्प का उपयोग करें, यह न पूछें। से man apt-get:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts and
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

आप DEBIAN_FRONTEND env वैरिएबल भी सेट कर सकते हैं

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
क्या करता DEBIAN_FRONTENDहै? क्या यह अन्य प्रक्रियाओं के लिए भी उपयोग किया जाता है?
कनाडा के ल्यूक ने 19

मैं अपने होम सर्वर पर यह कोशिश कर रहा हूं, और जैसे ही यह चलता है, सबसे अच्छा उत्तर
चुनूंगा

1
@CanadianLuke देखने के लिए यहाँ के लिए DEBIAN_FRONTENDman debconfहालांकि मेरे डेबियन में इसका उल्लेख नहीं है , इसलिए यह एक उबंटू चीज हो सकती है।
terdon

@terdon आपके पास -doc पैकेज debconf के लिए नहीं है। यह आदमी के 7 खंडों में है man 7 debconf;)
ब्रियम

@Braiam आह, ठीक है, मैंने देखा और कोशिश की man 7 debconfलेकिन कुछ नहीं मिला। अब मुझे पता है क्यों :)
terdon

27

ठीक है, शायद आप गलत उपकरण का उपयोग कर रहे हैं। unattended-upgradesपैकेज दैनिक आधार में सुरक्षा उन्नयन स्थापित करता है (कॉन्फ़िगर किया जा सकता है), आप कॉन्फ़िगर कर सकते हैं कि कौन से संकुल को अपग्रेड करना है या अपग्रेड नहीं करना है, आदि का उपयोग करके स्थापित किया जा सकता है:

sudo apt-get install unattended-upgrades

से man unattended-upgrades:

विन्यास उपयुक्त विन्यास तंत्र के माध्यम से किया जाता है। डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल /etc/apt/apt.conf.d/50unattended-upgrades पर देखी जा सकती है


@CanadianLuke यह सभी कॉन्फ़िगरेशन पढ़ता है, /etc/apt/apt.conf.d/लेकिन केवल उन लोगों के साथ शुरू होता है जो Unattended-Upgrade::पार्स हो जाते हैं।
ब्रिअम

मैं काम में सर्वरों में से एक पर यह कोशिश कर रहा हूं, और जैसे ही यह चलता है, सबसे अच्छा जवाब
चुनूंगा

10

जबकि पिछले उत्तर जानकारीपूर्ण हैं कि वे उस दौरान मानव द्वारा आवश्यक इनपुट के 'मुद्दे' को दरकिनार नहीं करते हैं upgrade। इसलिए, मैं निम्नलिखित का उपयोग कर रहा हूं:

export DEBIAN_FRONTEND=noninteractive
export DEBIAN_PRIORITY=critical
sudo -E apt-get -qy update
sudo -E apt-get -qy -o "Dpkg::Options::=--force-confdef" -o "Dpkg::Options::=--force-confold" upgrade
sudo -E apt-get -qy autoclean

गुठली की तरह 'वितरण' उन्नयन को शामिल करने के लिए dist-upgradeकमांड का उपयोग करें ।

कृपया इन मापदंडों पर गहराई से जानकारी केdpkg लिए सामान को देखें ।

आयात नोट : पैरामीटर sudoसहित कॉल -Eकरना आवश्यक है:

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

अन्यथा, EXPORTबयानों की कॉल को प्रभावित नहीं करेगा apt-get!

रेमी वैन एल्स्ट को श्रेय जाता है ! धन्यवाद!


1
क्या आप बता सकते हैं कि आपने अप-गेट अपग्रेड के लिए अन्य विकल्प क्यों जोड़े हैं?
फरो

1
इसके अलावा, क्या "सुडो-ई" की आवश्यकता है यदि स्क्रिप्ट को रॉट के क्रॉस्टब से चलाया जाता है?
फरो

1
@ फ़ारो जो इस बात पर निर्भर करता है कि आप किस माहौल / किस संदर्भ में क्रोनजोब को चलाना चाहेंगे। आम तौर पर, ये द्वारा चलाए जाते हैं root- इसलिए आपको इसका उपयोग करने की आवश्यकता नहीं है sudo। 'अन्य विकल्प' किसी भी मामले में अप्राप्य चलाने के लिए सेट किए गए हैं। कृपया देखें संदर्भित manपृष्ठ।
घबराना

4

इस तरह की चीज़ के लिए एक सामान्य उपकरण है yes:

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or 'y'.

इसलिए, उदाहरण के लिए, आप कर सकते हैं

yes | sudo apt-get upgrade 

कृपया ध्यान दें कि @Braiam या @ArthurUlfeldtapt-get upgrade द्वारा सुझाए गए विकल्पों का उपयोग करने के मामले में बेहतर है।


जब मैं इसे मैन्युअल रूप से करना चाहता हूं तो वह लाइन पेस्ट होती है apt-get update && yes | apt-get upgrade(हमारे सर्वर उपयोग करने वाले sudoनहीं हैं ... पूछें नहीं ...)
कनाडाई ल्यूक रिइनसेट माईना

पहले से उपलब्ध कराए गए विकल्प के बजाय ट्रिक का उपयोग क्यों किया गया ?? "-y" पहले से ही है।
फ़ारो

3
क्योंकि, जैसा कि मैंने उत्तर में कहा था, यह इस तरह के ऑपरेशन के लिए एक सामान्य उपकरण है, इसलिए यह उत्तर अन्य मामलों के लिए है, उपयुक्त के लिए नहीं। क्या आपने अंतिम पैराग्राफ नहीं पढ़ा? या पहला वाक्य?
terdon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.