cronで自動化するとapt-getが失敗するのはなぜですか?


15

cronを使用してシステムの更新を自動化しようとしています。以下に、私のcrontab、コマンド、および結果のエラーを見ることができます。

rootとしてupgrades.shを実行すると、スクリプトは正常に実行されます。cronを実行すると、apt-get -y update問題は発生しませんが、aptitude -y safe-upgrade失敗します。私はこのエラーを推測しています:debconf: (This frontend requires a controlling tty.)カーネルの更新があり、それが順番にgrubを更新するため、上書きすることを明示的に言う必要があります/boot/grub/menu.lst。しかし、パスエラーがわかりません。そして、私の監督を必要としないアップデートが欲しいのです。

私はこの質問unattended-upgradesを読んで、それはまだ受け入れられていない解決策であり、それを使用することになりますが、なぜcronを使用できないのですか?本当にシンプルで、もっとLinuxyである必要があるようです。

クロンタブ

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

upgrades.sh

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

エラー

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

回答:


10

メッセージは、PATH環境変数が間違っていることを示しています。

追加してみてください

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

の上部にcrontab

またはPATH、の2行目と同じ行を挿入できます~/bin/upgrades.sh。そうcrontabすれば、コマンドラインからのテストとテストからの結果は同じ結果になるはずです。


そうですか。#!/ bin / bash行がルートの通常のパスをロードすると誤って考えるスクリプトにコマンドを入れました。明らかに私は間違っていました。それでは、そもそもユーザーのデフォルトパスを決定するものと、それをどのように適用するのでしょうか?
djeikyb

cronがユーザーのパスを引き継がないのはなぜですか?crontabまたはスクリプトにパスを追加する方が良いですか?欠点はありますか?
-djeikyb

セキュリティ上の理由によるものと思われますが、私は同意します。1)スクリプトに配置する場合PATH=...は、ファイルを配置することができます。たとえば~/.env、スクリプト. ~/.envの上部近くを使用して作成するすべてのスクリプトから取得できます。次に、変更するPATH場合は、1つのファイルを編集するだけです。2)に配置するとcrontab、すべてのcronスクリプトを編集する必要はありませんが、変更する場合PATH~/.bashrcおよびなどcrontab)に編集する場所が2つあります。どちらが良いかはあなた次第です。
ミケル

涼しい。私の質問は、なぜ安全ではないのでしょうか?私は今グーグルで調べていますが、まだ何も思いついていません。とにかく、私は変更を加えました。他の何かが不安定になった場合に備えて、明日の朝に実行されたときに回答済みとマークします。
-djeikyb

私も知っていたらいいのに。理由がある場合、ドキュメントもcronソースコードもそれが何であるかを述べていません。理論的には、あるユーザーから別のユーザーにcrontabをコピーできるように一貫性のある環境を強制することもできたかもしれPATHませんが、変更されるだけなので、それが理由にはなりません。
ミケル

14

主な問題はすでに解決されていますが、インタラクティブttyなしでapt-getを実行しているため、debconf警告が表示されているようです。これらのメッセージを削除するには、次の環境変数を設定できます。

DEBIAN_FRONTEND=noninteractive

1

コミュニティWikiページがあります:crontabが機能しない理由。この場合、原因はcronの制限された環境変数にあるようです。/etc/cron.dailyのシェルスクリプトからこれを実行できますか?


あなたの答えを誤解したので、コメントすることはありません。
ルリ

0

CronHowtoから:

実行するコマンドによっては、crontabファイルの先頭に次の行を追加して、rootユーザーのPATH変数を展開する必要がある場合があります。

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

しかし、実際には、すべてがあなたと同じようにうまくやっているように見えます。

クロンタブ:

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

脚本:

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

ログ:

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.

私のエラーは、私に郵送されたcronジョブログから発生します。あなたと同じ10.04を実行しています。奇妙な
。– djeikyb

制限されたPATHを設定するcron構成ファイルである必要があります...今は問題ありません。
ルリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.