Thực hiện cập nhật apt-get và nâng cấp tự động hóa và không giám sát


28

Tôi có khoảng 7 máy chủ Debian do tôi quản lý và tôi muốn đặt chúng tự động cập nhật. Vì vậy, tôi đã tạo ra một kịch bản như vậy:

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

và đặt nó vào rootdanh sách crontab của. Thật không may, nó luôn bị treo trên phần Nâng cấp, hỏi tôi có chắc chắn muốn nâng cấp không. Bởi vì đó là một công việc định kỳ, tôi không thấy đầu ra cho đến khi nó gửi email cho tôi nói rằng nó thất bại. Có cách nào để nó bỏ qua lời nhắc đó không, và chỉ cần thực hiện nâng cấp tự động?


3
... Hoặc cron-apt.
derobert

Câu trả lời:


46

Sử dụng tùy chọn -y để apt-get để không yêu cầu. Từ 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.

Bạn cũng có thể đặt biến env DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade

1
Không gì DEBIAN_FRONTENDlàm gì? Nó được sử dụng cho các quá trình khác là tốt?
Luke Luke REINSTATE MONICA của Canada

Tôi đang thử điều này trên máy chủ nhà của mình và sẽ chọn câu trả lời tốt nhất ngay khi nó chạy
Luke Luke REINSTATE MONICA

1
@CanadianLuke xem tại đây cho DEBIAN_FRONTEND. man debconfMặc dù vậy, nó không được đề cập trong Debian của tôi , vì vậy nó có thể là một thứ Ubuntu.
terdon

@terdon bạn không có gói -doc để gỡ lỗi. Đó là trong 7 phần của người đàn ông man 7 debconf;)
Braiam

@Braiam ah, OK, tôi đã thấy điều đó và đã thử man 7 debconfnhưng không có gì. Bây giờ tôi biết tại sao :)
terdon

27

Vâng, có thể bạn đang sử dụng công cụ sai. unattended-upgradesgói cài đặt nâng cấp bảo mật hàng ngày (có thể được cấu hình), bạn có thể định cấu hình gói nào cần nâng cấp hoặc không nâng cấp, v.v. Có thể cài đặt bằng cách sử dụng:

sudo apt-get install unattended-upgrades

Từ man unattended-upgrades:

Cấu hình được thực hiện thông qua cơ chế cấu hình apt. Tệp cấu hình mặc định có thể được tìm thấy tại /etc/apt/apt.conf.d/50unattends-upgrades


@CanadianLuke nó đọc tất cả các cấu hình trong /etc/apt/apt.conf.d/nhưng chỉ những cấu hình bắt đầu bằng Unattended-Upgrade::phân tích cú pháp.
Braiam

Tôi đang thử điều này trên một trong các máy chủ tại nơi làm việc và sẽ chọn câu trả lời tốt nhất ngay khi nó chạy
Canada Luke REINSTATE MONICA

10

trong khi các câu trả lời trước là thông tin, họ không tránh khỏi "vấn đề" đầu vào theo yêu cầu của con người trong thời gian đó upgrade. do đó, tôi đang sử dụng như sau:

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

để bao gồm các nâng cấp 'phân phối' như hạt nhân sử dụng dist-upgradelệnh.

vui lòng xem phần giới thiệudpkg để biết thông tin chuyên sâu về các thông số này.

Lưu ý nhập : gọi sudobao gồm -Etham số là bắt buộc:

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.

nếu không, các EXPORTtuyên bố sẽ không ảnh hưởng đến các cuộc gọi của apt-get!

tín dụng cho Remy van Elst ! cảm ơn!


1
Bạn có thể giải thích lý do tại sao bạn thêm các tùy chọn khác để nâng cấp apt-get không?
FarO

1
Ngoài ra, có phải "sudo -E" nếu tập lệnh được chạy từ crontab của rott không?
FarO

1
@FarO phụ thuộc vào môi trường / trong bối cảnh nào bạn muốn chạy cronjob. nói chung, chúng được điều hành bởi root- vì vậy bạn hoàn toàn không cần sử dụng sudo. 'các tùy chọn khác' được đặt để chạy không giám sát trong mọi trường hợp. vui lòng xem mantrang tham khảo .
jitter

4

Một công cụ chung cho loại điều này là yes:

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

Vì vậy, ví dụ, bạn có thể làm

yes | sudo apt-get upgrade 

Xin lưu ý rằng trong trường hợp cụ thể apt-get upgradesử dụng các tùy chọn được đề xuất bởi @Braiam hoặc @ArthurUlfeldt thì tốt hơn.


Dòng tôi dán khi tôi muốn thực hiện thủ công là apt-get update && yes | apt-get upgrade(máy chủ của chúng tôi không được phép sử dụng sudo... Đừng hỏi ...)
Luke Luke REINSTATE MONICA của Canada

Tại sao sử dụng một mẹo thay vì một tùy chọn đã được cung cấp ?? "-Y" đã có trong apt-get rồi.
FarO

3
Bởi vì, như tôi đã nói trong câu trả lời, đây là một công cụ chung cho loại hoạt động này, vì vậy câu trả lời này dành cho các trường hợp khác, không phải cho apt. Bạn đã không đọc đoạn cuối? Hay câu đầu tiên?
terdon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.