anacronの呼び出し

今回は、より詳細にanacronについて解説します。【連載コラム:Linuxシステム管理標準教科書を読む(19)】

最終更新日:2025年01月15日

Linuxの基本的なスキルを習得したら、Linuxサーバーをシステムとして長期に運用管理していくためのスキルを身につけるのはいかがでしょうか。このコラムでは、「Linuxシステム管理標準教科書」の全体調整を担当した筆者が改めて大切なポイントを解説していきます。

教科書では基本であるcronについての解説に紙幅を多めに割いていますが、実際のシステムにおいては特別なスケジュールジョブ実行がない限り、anacronにより日次、週次、月次でジョブを実行する形を取っています。今回はより詳細にanacronについて解説します。まずはanacronがどのように呼び出されるのか、順を追って解説します。


anacronの呼び出し

anacronは、1時間に1回、cronから呼び出されます。まずこの動作について確認してみましょう。

cronの設定は、/etc/cron.dディレクトリに置かれた設定ファイルによって制御されています。

$ ls /etc/cron.d
0hourly
$ cat /etc/cron.d/0hourly
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

毎時1分にジョブが実行される設定が記述されています。run-partsという記述が見えますが、これがcronの動作における実体的なコマンドです。マニュアルを見てみましょう。

$ man run-parts
(略)
DESCRIPTION
       Crontabs is a historical name for the run-parts script and the system crontab. The run-parts command runs all executables in the specified directory.(略)

指定されたディレクトリにあるファイルを実行する、とあります。では、/etc/cron.hourlyには何があるでしょうか。

$ ls -l /etc/cron.hourly
合計 4
-rwxr-xr-x. 1 root root 610  4月  3  2024 0anacron
$ file /etc/cron.hourly/0anacron
/etc/cron.hourly/0anacron: a /usr/bin/sh script, ASCII text executable

fileコマンドで /etc/cron.hourly/0anacronを見てみると、シェルスクリプトであることがわかります。このシェルスクリプトがあるおかげで、anacronが定期的に実行されているわけです。

anacron呼び出しスクリプトの中身

では、このスクリプトの中身を見てみましょう。

$ cat /etc/cron.hourly/0anacron
#!/usr/bin/sh
# Check whether 0anacron was run today already
if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0
fi

# Do not run jobs when on battery power
online=1
for psupply in /sys/class/power_supply/* ; do
    if [ `cat "$psupply/type" 2>/dev/null`x = Mainsx ] && [ -f "$psupply/online" ]; then
        if [ `cat "$psupply/online" 2>/dev/null`x = 1x ]; then
            online=1
            break
        else
            online=0
        fi
    fi
done
if [ $online = 0 ]; then
    exit 0
fi
/usr/sbin/anacron -s

まず前半では、その日にanacronが実行されているかどうかを確認しています。/var/spool/anacron/cron.dailyの中身と、dateコマンドの実行結果を比較しています。anacronは1日に1回実行なので、既に実行されていればここで処理は終了します。

$ sudo cat /var/spool/anacron/cron.daily
20241226
$ date +%Y%m%d
20241226

次のセクションでは、電源がバッテリーで動作している場合には実行しません。

どちらのチェックも引っかからなかった場合には、anacronが実行されます。-sオプションは、もし前の実行で終わっていない処理があった場合には新しいジョブを実行しない、という指定です。

今回は、anacronがどのようにして呼び出されるのか、順を追って確認しました。次回はanacron自体の動作について解説します。


筆者紹介
宮原 徹 氏

宮原 徹 氏

株式会社びぎねっと

Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。

<Linuxシステム管理標準教科書とは>

Linuxシステム管理標準教科書」(システム管理教科書)は2015年4月にリリースされた標準教科書シリーズの1冊です。Linuxシステムの運用管理という観点で書かれており、システム管理者という業務において知っておかなければならない基本的なトピックが解説されています。「Linux標準教科書」「Linuxサーバー構築標準教科書」でコマンド操作やサーバー構築の基本を学んだら、このシステム管理教科書を読んで、単にLinuxを使うのではなく、システムとして長期的に管理運用していくためのスキルを身につけてください。

バックナンバー

第18回:カーネルとデバイスの確認
第17回:カーネルの起動
第16回:新しいディストリビューションでのGRUBの取り扱い
第15回:DHCPについて
第14回:firewalldによるパケットフィルタリングの設定

ページトップへ