Mengapa apt-get gagal ketika diotomatisasi dengan cron?

15

Saya mencoba menggunakan cron untuk mengotomatiskan pembaruan sistem saya. Anda dapat melihat crontab saya, perintah, dan kesalahan yang dihasilkan di bawah ini.

Ketika saya menjalankan upgrades.sh sebagai root, skrip berjalan dengan baik. Ketika cron menjalankannya, apt-get -y updatetidak ada masalah, tetapi aptitude -y safe-upgradegagal. Saya menduga kesalahan ini: debconf: (This frontend requires a controlling tty.)karena ada pembaruan kernel yang pada gilirannya memperbarui grub, yang mengharuskan saya secara eksplisit mengatakan tidak apa-apa untuk menimpa /boot/grub/menu.lst. Tapi saya tidak mengerti kesalahan jalur. Dan saya ingin pembaruan yang tidak memerlukan pengawasan saya untuk pergi.

Saya telah membaca pertanyaan ini dan ini belum merupakan solusi yang dapat diterimaunattended-upgrades , dan akhirnya saya dapat menggunakannya, tetapi mengapa saya tidak dapat menggunakan cron? Sepertinya itu harus sangat sederhana, dan lebih linuxy.

Crontab

root@daedalus:~/bin# crontab -l
# m h  dom mon dow   command
45 06 * * * ~/bin/upgrades.sh

upgrade.sh

root@daedalus:~/bin# cat upgrades.sh 
#!/bin/bash
/usr/bin/apt-get -y update
/usr/bin/aptitude -y safe-upgrade

Kesalahan

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin:
Fetched 37.6MB in 4min 23s (143kB/s)
dpkg: warning: 'ldconfig' not found on PATH.
dpkg: warning: 'start-stop-daemon' not found on PATH.
dpkg: warning: 'update-rc.d' not found on PATH.
dpkg: 3 expected program(s) not found on PATH.
NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
E: Sub-process /usr/bin/dpkg returned an error code (2)
A package failed to install.  Trying to recover:
dpkg: warning: 'ldconfig' not found on PATH.
dpkg: warning: 'start-stop-daemon' not found on PATH.
dpkg: warning: 'update-rc.d' not found on PATH.
dpkg: 3 expected program(s) not found on PATH.
NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
Reading package lists...
Building dependency tree...
Reading state information...
Reading extended state information...
Initializing package states...
Writing extended state information...
djeikyb
sumber

Jawaban:

10

Pesan memberi tahu Anda bahwa PATHvariabel lingkungan Anda salah.

Coba tambahkan

PATH=/usr/bin:/bin:/usr/sbin:/sbin

ke bagian atas Anda crontab.

Atau Anda bisa meletakkan PATHbaris yang sama dengan baris kedua ~/bin/upgrades.sh. Dengan begitu tes Anda dari baris perintah dan dari tes Anda crontabakan menghasilkan hasil yang sama.

Mikel
sumber
Saya melihat. Saya memasukkan perintah ke dalam skrip yang secara keliru berpikir bahwa baris #! / Bin / bash akan memuat path normal root. Jelas saya salah. Jadi apa yang menentukan jalur default pengguna di tempat pertama, dan bagaimana penerapannya?
djeikyb
Mengapa cron tidak mengambil jalur pengguna? Apakah lebih baik menambahkan path ke crontab atau skrip saya? Apakah ada kerugiannya?
djeikyb
Seharusnya karena alasan keamanan, tapi saya setuju, itu menjengkelkan. 1) Jika Anda memasukkannya ke dalam skrip Anda, Anda bisa memasukkannya ke PATH=...dalam file, mis. ~/.env, Dan mengambilnya dari setiap skrip yang Anda gunakan di . ~/.envdekat bagian atas skrip. Kemudian jika Anda mengubah, PATHAnda hanya perlu mengedit satu file. 2) Jika Anda memasukkannya crontab, itu berarti Anda tidak perlu mengedit semua skrip cron Anda, tetapi Anda akan memiliki dua tempat untuk mengedit jika Anda ingin mengubah PATH(misalnya ~/.bashrcdan crontab). Mana yang lebih baik terserah Anda.
Mikel
Keren. Saya kira pertanyaan saya adalah, mengapa tidak aman? Saya googling sekarang, tetapi belum menemukan apa pun. Ngomong-ngomong, saya sudah membuat perubahan, dan saya akan tandai sebagai dijawab besok pagi saat dijalankan, kalau-kalau ada yang tidak beres.
djeikyb
Saya berharap saya tahu juga. Jika ada alasan, baik dokumentasi maupun cronkode sumber tidak mengatakan apa itu. Secara teori itu bisa saja memaksa lingkungan yang konsisten sehingga Anda dapat menyalin crontab dari satu pengguna ke pengguna lain, tetapi hanya PATHdiubah, sehingga tidak bisa menjadi alasannya.
Mikel
14

Meskipun masalah utama Anda telah dijawab, sepertinya Anda mendapatkan peringatan debconf karena Anda menjalankan apt-get tanpa tty interaktif. Untuk menghilangkan pesan-pesan ini, Anda dapat mengatur variabel lingkungan ini:

DEBIAN_FRONTEND=noninteractive
TrinitronX
sumber
1

Ada halaman wiki komunitas: Alasan mengapa crontab tidak berfungsi . Dalam hal ini, sepertinya penyebabnya adalah variabel lingkungan terbatas cron. Bisakah Anda menjalankan ini dari skrip shell di /etc/cron.daily?

Masyarakat
sumber
Disalahpahami jawaban Anda, jadi tidak perlu berkomentar.
luri
0

Dari CronHowto :

Bergantung pada perintah yang dijalankan, Anda mungkin perlu memperluas variabel PATH pengguna root dengan meletakkan baris berikut di bagian atas file crontab mereka:

PATH = / usr / sbin: / usr / bin: / sbin: / bin

Tetapi pada kenyataannya, semuanya tampak baik-baik saja melakukan hal yang sama seperti Anda .... Dari mana Anda mengambil kesalahan itu?

CRONTAB:

root@PORTATIL:/var/log$ crontab -l
* * */2 * * /usr/share/myupdate.sh > /var/log/myupdate.log

NASKAH:

root@PORTATIL:/etc# cat /usr/share/myupdate.sh 
#!/bin/bash
#Testing updates
apt-get update -y
apt-get upgrade -y

CATATAN:

root@PORTATIL:/etc# cat /var/log/myupdate.log 

Hit http://security.ubuntu.com lucid-security Release.gpg
Hit http://archive.canonical.com lucid Release.gpg
Hit http://archive.canonical.com lucid Release.gpg
Hit http://packages.medibuntu.org lucid Release.gpg
Get:1 http://dl.google.com stable Release.gpg [197B]
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://security.ubuntu.com lucid-security Release
Hit http://badgerports.org lucid Release.gpg
Hit http://archive.canonical.com lucid Release
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net maverick Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Hit http://ppa.launchpad.net lucid Release.gpg
Get:2 http://dl.google.com stable Release [1347B]
Hit http://security.ubuntu.com lucid-security/main Packages
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://packages.medibuntu.org lucid Release
Hit http://download.virtualbox.org lucid Release.gpg
Hit http://archive.canonical.com lucid Release
Hit http://linux.dropbox.com lucid Release.gpg
Get:3 http://dl.google.com stable/main Packages [1110B]
Hit http://security.ubuntu.com lucid-security/restricted Packages
Hit http://security.ubuntu.com lucid-security/main Sources
Hit http://security.ubuntu.com lucid-security/restricted Sources
Hit http://security.ubuntu.com lucid-security/universe Packages
Hit http://security.ubuntu.com lucid-security/universe Sources
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net maverick Release
Hit http://ppa.launchpad.net lucid Release
Hit http://ppa.launchpad.net lucid Release
Hit http://badgerports.org lucid Release
Hit http://archive.canonical.com lucid/partner Packages
Hit http://security.ubuntu.com lucid-security/multiverse Packages
Hit http://security.ubuntu.com lucid-security/multiverse Sources
Hit http://ppa.launchpad.net lucid Release
Hit http://packages.medibuntu.org lucid/free Packages
Hit http://download.virtualbox.org lucid Release
Hit http://es.archive.ubuntu.com lucid Release.gpg
Hit http://linux.dropbox.com lucid Release
Hit http://archive.canonical.com lucid/partner Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://es.archive.ubuntu.com lucid-updates Release.gpg
Hit http://badgerports.org lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net maverick/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://packages.medibuntu.org lucid/non-free Packages
Hit http://linux.dropbox.com lucid/main Packages
Hit http://es.archive.ubuntu.com lucid Release
Hit http://download.virtualbox.org lucid/contrib Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://es.archive.ubuntu.com lucid-updates Release
Hit http://es.archive.ubuntu.com lucid/main Packages
Hit http://es.archive.ubuntu.com lucid/restricted Packages
Hit http://es.archive.ubuntu.com lucid/main Sources
Hit http://es.archive.ubuntu.com lucid/restricted Sources
Hit http://es.archive.ubuntu.com lucid/universe Packages
Hit http://es.archive.ubuntu.com lucid/universe Sources
Hit http://es.archive.ubuntu.com lucid/multiverse Packages
Hit http://es.archive.ubuntu.com lucid/multiverse Sources
Hit http://es.archive.ubuntu.com lucid-updates/main Packages
Hit http://es.archive.ubuntu.com lucid-updates/restricted Packages
Hit http://es.archive.ubuntu.com lucid-updates/main Sources
Hit http://es.archive.ubuntu.com lucid-updates/restricted Sources
Hit http://es.archive.ubuntu.com lucid-updates/universe Packages
Hit http://es.archive.ubuntu.com lucid-updates/universe Sources
Hit http://es.archive.ubuntu.com lucid-updates/multiverse Packages
Hit http://es.archive.ubuntu.com lucid-updates/multiverse Sources
Fetched 2654B in 1s (1628B/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
luri
sumber
Kesalahan saya berasal dari cron job log yang dikirimkan kepada saya. Saya menjalankan 10,04, sama seperti Anda. Aneh ..
djeikyb
Pasti ada beberapa file konfigurasi cron yang mengatur PATH restriktif ... Saya tidak mengalami masalah sekarang.
luri