Buat pembaruan apt-get dan tingkatkan otomatis dan tanpa pengawasan

28

Saya memiliki sekitar 7 server Debian yang saya kelola, dan saya ingin mengaturnya agar secara otomatis memperbarui diri. Jadi, saya membuat skrip seperti:

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

dan meletakkannya rootdi daftar crontab. Sayangnya, selalu hang di bagian Upgrade, menanyakan apakah saya yakin saya ingin memutakhirkan. Karena ini adalah pekerjaan cron, saya tidak melihat hasilnya sampai saya mengirim email mengatakan itu gagal. Apakah ada cara untuk mengabaikannya, dan lakukan saja peningkatan secara otomatis?

Luke Kanada REINSTATE MONICA
sumber
3
... atau cron-apt.
derobert

Jawaban:

46

Gunakan opsi -y untuk apt-get agar tidak meminta. Dari 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.

Anda juga dapat mengatur variabel env DEBIAN_FRONTEND

DEBIAN_FRONTEND=noninteractive apt-get -y upgrade
Arthur Ulfeldt
sumber
1
Apa yang DEBIAN_FRONTENDharus dilakukan Apakah ini digunakan untuk proses lain juga?
Luke Kanada REINSTATE MONICA
Saya mencoba ini di server rumah saya, dan akan memilih jawaban terbaik segera setelah itu berjalan
Luke Kanada REINSTATE MONICA
1
@CanadianLuke lihat di sini untuk DEBIAN_FRONTEND. Itu tidak disebutkan dalam Debian saya man debconf, jadi itu mungkin hal Ubuntu.
terdon
@terdon Anda tidak memiliki paket -doc untuk debconf. Ada di bagian 7 pria itu man 7 debconf;)
Braiam
@Braiam ah, OK, saya melihat itu dan mencoba man 7 debconftetapi tidak mendapatkan apa-apa. Sekarang saya tahu mengapa :)
terdon
27

Yah, mungkin Anda menggunakan alat yang salah. unattended-upgradespaket menginstal peningkatan keamanan setiap hari (dapat dikonfigurasi), Anda dapat mengonfigurasi paket apa yang akan ditingkatkan atau tidak ditingkatkan, dll. Dapat diinstal menggunakan:

sudo apt-get install unattended-upgrades

Dari man unattended-upgrades:

Konfigurasi dilakukan melalui mekanisme konfigurasi yang tepat. File konfigurasi default dapat ditemukan di /etc/apt/apt.conf.d/50unattended-upgrades

Braiam
sumber
@ CanadianLuke ia membaca semua konfigurasi /etc/apt/apt.conf.d/tetapi hanya yang dimulai dengan yang Unattended-Upgrade::diuraikan.
Braiam
Saya mencoba ini di salah satu server di tempat kerja, dan akan memilih jawaban terbaik segera setelah itu berjalan
Luke Kanada REINSTATE MONICA
10

sementara jawaban sebelumnya informatif mereka tidak menghindari 'masalah' input yang dibutuhkan oleh sarana manusia selama upgrade. oleh karena itu, saya menggunakan yang berikut ini:

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

untuk memasukkan upgrade 'distribusi' seperti kernel menggunakan dist-upgradeperintah.

silakan lihat manpgage daridpkg informasi mendalam pada parameter ini.

catatan impor : pemanggilan sudotermasuk -Eparameter diperlukan:

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.

jika tidak, EXPORTpernyataan tidak akan memengaruhi panggilan apt-get!

kredit diberikan kepada Remy van Elst ! Terima kasih!

naik opelet
sumber
1
Bisakah Anda menjelaskan mengapa Anda menambahkan opsi lain ke apt-get upgrade?
FarO
1
Juga, apakah "sudo -E" diperlukan jika skrip dijalankan dari rott's crontab?
FarO
1
@ Far yang tergantung pada lingkungan apa / dalam konteks apa Anda ingin cronjob dijalankan. umumnya, ini dijalankan oleh root- jadi Anda tidak perlu menggunakan sudosama sekali. 'opsi lain' diatur untuk dijalankan tanpa pengawasan dalam hal apa pun. silakan lihat manhalaman referensi .
Jitter
4

Alat generik untuk hal semacam ini adalah yes:

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

Jadi, misalnya, Anda bisa melakukannya

yes | sudo apt-get upgrade 

Harap dicatat bahwa dalam kasus tertentu apt-get upgrademenggunakan opsi yang disarankan oleh @Braiam atau @ArthurUlfeldt lebih baik.

terdon
sumber
Baris yang saya tempel ketika saya ingin melakukannya secara manual adalah apt-get update && yes | apt-get upgrade(server kami tidak seharusnya menggunakan sudo... Jangan tanya ...)
Luke Kanada REINSTATE MONICA
Mengapa menggunakan trik alih-alih opsi yang sudah disediakan ?? "-y" sudah di apt-get.
FarO
3
Karena, seperti yang saya katakan dalam jawaban, ini adalah alat umum untuk operasi semacam ini, jadi jawaban ini untuk kasus lain, bukan untuk apt. Apakah Anda tidak membaca paragraf terakhir? Atau kalimat pertama?
terdon