Tại sao apt-get thất bại khi tự động với cron?


15

Tôi đang cố gắng sử dụng cron để tự động cập nhật hệ thống của mình. Bạn có thể thấy crontab của tôi, các lệnh và kết quả là lỗi bên dưới.

Khi tôi chạy nâng cấp.sh với quyền root, tập lệnh chạy tốt. Khi cron chạy nó, apt-get -y updatechạy không có vấn đề, nhưng aptitude -y safe-upgradekhông thành công. Tôi đoán lỗi này: debconf: (This frontend requires a controlling tty.)là bởi vì có một bản cập nhật kernel, lần lượt cập nhật grub, điều này đòi hỏi tôi phải nói rõ ràng là không cần ghi đè /boot/grub/menu.lst. Nhưng tôi không hiểu các lỗi đường dẫn. Và tôi muốn các bản cập nhật không yêu cầu sự giám sát của tôi.

Tôi đã đọc qua câu hỏi này và đó là giải pháp chưa được chấp nhậnunattended-upgrades và cuối cùng tôi có thể sử dụng nó, nhưng tại sao tôi không thể sử dụng cron? Có vẻ như nó phải thực sự đơn giản và nhiều linuxy.

Crontab

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

nâng cấp.sh

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

Lỗi

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...

Câu trả lời:


10

Các thông báo cho bạn biết rằng PATHbiến môi trường của bạn là sai.

Hãy thử thêm

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

đến đỉnh của bạn crontab.

Hoặc bạn có thể đặt cùng một PATHdòng với dòng thứ hai ~/bin/upgrades.sh. Bằng cách đó, bài kiểm tra của bạn từ dòng lệnh và bài kiểm tra của bạn crontabsẽ tạo ra kết quả tương tự.


Tôi hiểu rồi. Tôi đặt lệnh vào một tập lệnh nhầm tưởng rằng dòng #! / Bin / bash sẽ tải đường dẫn thông thường của root. Rõ ràng là tôi đã sai. Vậy điều gì quyết định đường dẫn mặc định của người dùng ở vị trí đầu tiên và cách áp dụng?
djeikyb

Tại sao cron không đi theo con đường của người dùng? Là tốt hơn để thêm đường dẫn đến crontab hoặc tập lệnh của tôi? Có nhược điểm nào không?
djeikyb

Nó được cho là vì lý do bảo mật, nhưng tôi đồng ý, nó gây phiền nhiễu. 1) Nếu bạn đặt nó trong tập lệnh của mình, bạn có thể đặt PATH=...một tập tin, ví dụ ~/.env, và lấy nó từ mọi tập lệnh bạn viết bằng cách sử dụng . ~/.envgần đầu tập lệnh. Sau đó, nếu bạn thay đổi, PATHbạn chỉ phải chỉnh sửa một tệp. 2) Nếu bạn đặt nó vào crontab, điều đó có nghĩa là bạn không phải chỉnh sửa tất cả các tập lệnh cron của mình, nhưng bạn sẽ có hai nơi để chỉnh sửa nếu bạn muốn thay đổi PATH(ví dụ ~/.bashrccrontab). Cái nào tốt hơn là tùy bạn.
Mikel

Mát mẻ. Tôi đoán câu hỏi của tôi là, tại sao nó không an toàn? Tôi đang googling ngay bây giờ, nhưng chưa nghĩ ra bất cứ điều gì. Dù sao, tôi đã thực hiện các thay đổi và tôi sẽ đánh dấu là đã trả lời vào sáng mai khi nó chạy, chỉ trong trường hợp có thứ gì đó trở nên khó khăn.
djeikyb

Tôi ước tôi cũng biết. Nếu có một lý do, cả tài liệu và cronmã nguồn đều không nói nó là gì. Về lý thuyết, nó có thể đã buộc một môi trường nhất quán để bạn có thể sao chép một crontab từ người dùng này sang người dùng khác, nhưng chỉ PATHđược thay đổi, vì vậy đó không thể là lý do.
Mikel

14

Mặc dù vấn đề chính của bạn đã được trả lời, nhưng có vẻ như bạn đang nhận được cảnh báo gỡ lỗi vì bạn đang chạy apt-get mà không có tty tương tác. Để loại bỏ các thông báo này, bạn có thể đặt biến môi trường này:

DEBIAN_FRONTEND=noninteractive

1

Có một trang wiki cộng đồng: Lý do tại sao crontab không hoạt động . Trong trường hợp này, có vẻ như nguyên nhân là do các biến môi trường hạn chế của cron. Bạn có thể chạy cái này từ tập lệnh shell trong /etc/cron.d Daily không?


Hiểu sai câu trả lời của bạn, vì vậy không có gì để bình luận.
luri

0

Từ CronHowto :

Tùy thuộc vào các lệnh đang được chạy, bạn có thể cần mở rộng biến PATH của người dùng gốc bằng cách đặt dòng sau ở đầu tệp crontab của họ:

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

Nhưng trên thực tế, mọi thứ dường như đều ổn khi làm giống như bạn .... Bạn đã lấy những lỗi đó từ đâu?

CRONAB:

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

KỊCH BẢN:

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

ĐĂNG NHẬP:

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.

Lỗi của tôi đến từ nhật ký công việc cron gửi cho tôi. Tôi đang chạy 10.04, giống như bạn. Lạ thật ..
djeikyb

Phải là một số tệp cấu hình cron thiết lập một PATH hạn chế ... Tôi không gặp vấn đề ngay bây giờ.
luri
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.