ทำการปรับปรุง apt-get และอัปเกรดอัตโนมัติและไม่ต้องใส่ข้อมูล


28

ฉันมีเซิร์ฟเวอร์ Debian ประมาณ 7 แห่งที่ฉันจัดการและฉันต้องการตั้งให้อัปเดตตัวเองโดยอัตโนมัติ ดังนั้นฉันจึงสร้างสคริปต์เป็นเช่นนี้:

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

และวางไว้ในrootรายการ crontab ของ น่าเสียดายที่มันมักจะแฮงค์ในส่วนอัพเกรดถามว่าฉันแน่ใจว่าฉันต้องการอัพเกรด เพราะมันเป็นงาน cron ฉันไม่เห็นผลลัพธ์จนกว่าจะส่งอีเมลถึงฉันว่ามันล้มเหลว มีวิธีให้ข้ามการแจ้งเตือนนั้นและทำการอัปเกรดอัตโนมัติหรือไม่


3
... หรือ cron-apt
derobert

คำตอบ:


46

ใช้ตัวเลือก - y เพื่อ apt-get เพื่อที่จะไม่ถาม จาก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.

นอกจากนี้คุณยังสามารถตั้งค่าตัวแปร enb DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
อะไรDEBIAN_FRONTENDทำอย่างไร มันใช้สำหรับกระบวนการอื่นด้วยหรือไม่
Canadian Luke ติดตั้ง MONICA ใหม่

ฉันพยายามทำสิ่งนี้บนเซิร์ฟเวอร์ที่บ้านของฉันและจะเลือกคำตอบที่ดีที่สุดทันทีที่มันทำงาน
Canadian Luke ติดตั้งใหม่ MONICA

1
@CanadianLuke ดูที่นี่DEBIAN_FRONTENDสำหรับ มันไม่ได้ถูกกล่าวถึงใน Debian ของฉันman debconfดังนั้นมันอาจเป็นสิ่งที่อูบุนตู
terdon

@terdon คุณไม่มีแพ็กเกจ -doc สำหรับ debconf มันอยู่ในส่วนที่ 7 ของมนุษย์man 7 debconf;)
Braiam

@Braiam อ่าฉันเห็นแล้วลองman 7 debconfแต่ก็ไม่ได้อะไรเลย ตอนนี้ฉันรู้แล้วว่าทำไม :)
terdon

27

บางทีคุณอาจใช้เครื่องมือที่ผิด unattended-upgradesแพ็คเกจติดตั้งการอัปเกรดความปลอดภัยเป็นรายวัน (สามารถกำหนดค่าได้) คุณสามารถกำหนดค่าแพคเกจที่จะอัพเกรดหรือไม่อัปเกรดเป็นต้นสามารถติดตั้งได้โดยใช้:

sudo apt-get install unattended-upgrades

จากman unattended-upgrades:

การกำหนดค่าจะทำผ่านกลไกการกำหนดค่า apt ไฟล์การกำหนดค่าเริ่มต้นสามารถดูได้ที่ /etc/apt/apt.conf.d/50unattended-upgrades


@CanadianLuke มันอ่านการกำหนดค่าทั้งหมดใน/etc/apt/apt.conf.d/แต่เฉพาะผู้ที่เริ่มต้นด้วยการUnattended-Upgrade::ได้รับการแยกวิเคราะห์
Braiam

ฉันพยายามทำสิ่งนี้กับเซิร์ฟเวอร์ตัวใดตัวหนึ่งในที่ทำงานและจะเลือกคำตอบที่ดีที่สุดทันทีที่มันทำงาน
Canadian Luke REINSTATE MONICA

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คำสั่ง

โปรดดูmanpgage ของdpkgสำหรับข้อมูลเชิงลึกเกี่ยวกับพารามิเตอร์เหล่านี้

importat note : การเรียก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!

เครดิตไปที่Remy van Elst ! ขอบคุณ!


1
คุณช่วยอธิบายได้ไหมว่าทำไมคุณถึงเพิ่มตัวเลือกอื่น ๆ ในการอัพเกรด apt-get?
FarO

1
นอกจากนี้ยังจำเป็นต้องมี "sudo -E" หากสคริปต์ถูกเรียกใช้จาก crontab ของ rott หรือไม่
FarO

1
@FARO ที่ขึ้นอยู่กับสภาพแวดล้อม / ในบริบทที่คุณต้องการให้ cronjob ทำงาน โดยทั่วไปแล้วสิ่งเหล่านี้จะดำเนินการโดยroot- ดังนั้นคุณไม่จำเป็นต้องใช้sudoเลย 'ตัวเลือกอื่น ๆ ' ถูกตั้งค่าให้ทำงานแบบอัตโนมัติในกรณีใด ๆ โปรดดูmanหน้าอ้างอิง
กระวนกระวายใจ

4

เครื่องมือทั่วไปสำหรับสิ่งนี้คือyes:

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

ตัวอย่างเช่นคุณสามารถทำได้

yes | sudo apt-get upgrade 

โปรดทราบว่าในกรณีเฉพาะของการapt-get upgradeใช้ตัวเลือกที่แนะนำโดย@Braiamหรือ@ArthurUlfeldtดีกว่า


บรรทัดที่ฉันวางเมื่อฉันต้องการทำด้วยตนเองคือapt-get update && yes | apt-get upgrade(เซิร์ฟเวอร์ของเราไม่ควรใช้sudo... อย่าถาม ... )
Canadian Luke ติดตั้งใหม่ MONICA

เหตุใดจึงใช้เคล็ดลับแทนตัวเลือกที่ระบุไว้แล้ว? "-y" เป็น apt-get แล้ว
FarO

3
เพราะอย่างที่ฉันพูดในคำตอบนี้เป็นเครื่องมือทั่วไปสำหรับการดำเนินการประเภทนี้ดังนั้นคำตอบนี้สำหรับกรณีอื่น ๆ ไม่ใช่เพื่อที่เหมาะสม คุณไม่ได้อ่านย่อหน้าสุดท้ายหรือไม่ หรือประโยคแรก?
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.