自動アップデート(yum update)の設定について記述します。
Table of Contents
1 自動アップデートの為のパッケージ
以下の2つのパッケージがあります。
yum-updateonboot | 起動時にyum updateを実行 |
yum-cron | 定期的にyum updateを実行 |
デスクトップ用途で使うならyum-updateonboot、サーバ用途で使うならばyum-cronを使うと良いでしょう。
2 yum-updateonboot
systemdを利用して、起動時にyum updateを自動実行するパッケージです。
yumでyum-updateonbootをインストールし、systemctlで有効にします。
$ sudo yum install -y yum-updateonboot $ sudo systemctl enable yum-updateonboot
次回、起動時にyum updateが自動実行されます。
3 yum-cron
cronとanacronを利用して、定期的にyum updateを実行するパッケージです。
yumでyum-cronをインストールし、systemctlで有効にします。
$ sudo yum install -y yum-cron $ sudo systemctl enable yum-cron $ sudo systemctl start yum-cron
yum-cronは毎時実行する為の0yum-hourly.cronと毎日実行する為の0yum-daily.cronを持ちます。
cron job file | config file for yum update |
---|---|
/etc/cron.hourly/0yum-hourly.cron | /etc/yum/yum-cron-hourly.conf |
/etc/cron.daily/0yum-daily.cron | /etc/yum/yum-cron.conf |
デフォルトでは0-yum-hourly.cronは何も実行せず、0-yum-daily.cronはアップデートパッケージのダウンロードのみを実行します。
0yum-daily.cronでアップデートも実行するように変更します。
また0yum-daily.cronの実行が開始されてからyum updateが実行されるまでのランダムな待ち時間を0に変更しています。
これはanacronが0yum-daily.cronを実行するのに、すでにランダムな待ち時間を消費しているためです。
$ diff -uprN /etc/yum/yum-cron.conf{.org,} --- /etc/yum/yum-cron.conf.org 2016-05-26 21:01:11.352642602 +0900 +++ /etc/yum/yum-cron.conf 2016-05-26 21:01:30.218747972 +0900 @@ -17,7 +17,7 @@ download_updates = yes # Whether updates should be applied when they are available. Note # that download_updates must also be yes for the update to be applied. -apply_updates = no +apply_updates = yes # Maximum amout of time to randomly sleep, in minutes. The program # will sleep for a random amount of time between 0 and random_sleep @@ -25,7 +25,7 @@ apply_updates = no # times that multiple systems will access update servers. If # random_sleep is 0 or negative, the program will run immediately. # 6*60 = 360 -random_sleep = 360 +random_sleep = 0 [emitters]
3.1 実行結果
0anacronからcron.dailyが起動し、cron.dailyから0yum-daily.cronが起動しています。
yum updateに5分程度掛かっています。途中で0yum-hourly.cronが実行されますが、何もせずに終了しています。
May 27 20:01:01 centos-7 CROND[2529]: (root) CMD (run-parts /etc/cron.hourly) May 27 20:01:01 centos-7 run-parts(/etc/cron.hourly)[2529]: starting 0anacron May 27 20:01:01 centos-7 anacron[2552]: Anacron started on 2016-05-27 May 27 20:01:01 centos-7 run-parts(/etc/cron.hourly)[2555]: finished 0anacron May 27 20:01:01 centos-7 anacron[2552]: Will run job `cron.daily' in 44 min. May 27 20:01:01 centos-7 anacron[2552]: Will run job `cron.weekly' in 64 min. May 27 20:01:01 centos-7 anacron[2552]: Will run job `cron.monthly' in 84 min. May 27 20:01:01 centos-7 anacron[2552]: Jobs will be executed sequentially May 27 20:01:01 centos-7 run-parts(/etc/cron.hourly)[2529]: starting 0yum-hourly.cron May 27 20:01:14 centos-7 run-parts(/etc/cron.hourly)[2604]: finished 0yum-hourly.cron May 27 20:45:01 centos-7 anacron[2552]: Job `cron.daily' started May 27 20:45:01 centos-7 run-parts(/etc/cron.daily)[5838]: starting 0yum-daily.cron May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[30186]: finished 0yum-daily.cron May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[5838]: starting logrotate May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[30209]: finished logrotate May 27 20:51:00 centos-7 run-parts(/etc/cron.daily)[5838]: starting man-db.cron May 27 20:52:00 centos-7 run-parts(/etc/cron.daily)[5493]: finished man-db.cron May 27 20:52:00 centos-7 run-parts(/etc/cron.daily)[5838]: starting mlocate May 27 20:52:08 centos-7 run-parts(/etc/cron.daily)[5513]: finished mlocate May 27 20:52:08 centos-7 anacron[2552]: Job `cron.daily' terminated (mailing output)
yum updateのログは以下の通りです。このログはmailボックスにも送られています。
$ cat /var/log/yum May 27 20:45:49 Updated: java-1.8.0-openjdk-headless.x86_64 1:1.8.0.91-0.b14.el7_2 May 27 20:45:50 Updated: java-1.7.0-openjdk-headless.x86_64 1:1.7.0.101-2.6.6.1.el7_2 May 27 20:46:02 Updated: tzdata-java.noarch 2016d-1.el7 <snip> May 27 20:48:34 Updated: crash.x86_64 7.1.2-3.el7_2.1 May 27 20:48:35 Updated: graphite2.x86_64 1.3.6-1.el7_2 May 27 20:48:51 Installed: kernel-devel.x86_64 3.10.0-327.18.2.el7
3.2 再起動はサポートされていない
anacronの時間外にrebootを実行するcron jobを登録するしかないです(/etc/anacrontabのSTART_HOURS_RANGEの範囲外の時間)。
デフォルトではSTART_HOURS_RANGEは3-22なので、日曜日の00:00に"shutdown -r 0:10"を実行するcron jobを以下の様に登録しました。
"shtudown -r now"の代わりに"shutdown -r 0:10"を実行することでcron jobのログが出力されます。
$ sudo crontab -u root -l 0 0 * * 0 /usr/sbin/shutdown -r 0:10