ブログ

Armadillo-440:cronで定期的にコマンドを実行する方法をまとめました。

at_yukari.hara
2019年11月8日 15時50分

Armadillo-440の実践開発ガイドでも紹介しているcronでの定期実行するについて、
説明のページが複数個所にわたっている為、手順をまとめました。

実行環境

  • Armadillo-440
  • ATDE5

手順

1.Atmark Distを使ったルートファイルシステムの作成

ユーザーランドのルートファイルシステムと、カーネルのイメージファイルを作成する為にAtmark Distの作成を行います。
こちらを参考にして「7.2.3. 基本的なコンフィギュレーション」まで行ってください。

2.プロダクトディレクトリにcrontabファイルを追加する。

crontabファイルを追加します。

vi atmark-dist/vendors/AtmarkTechno/my-product/etc/crontab

今回は例として/etc/config/ディレクトリのhello.shというスクリプトを毎分動かす為に下記の内容で保存します。

SHELL=/bin/sh
PATH=/usr/sbin:/usr/bin:/sbin:/bin
TZ=JST-9
* * * * * /etc/config/web_image_update.sh

※ctontabの書き方はこちらを参照ください。
※ユーザー名の指定する方法もありますが、3で行いますのでユーザー名の指定は不要です。

3.Makefileを修正する。

crontab ファイルをルートファイルシステムに含めるように下記の箇所を修正します。

romfs:
        @rm -f etc/DISTNAME
        @echo "$(DIST_NAME) v$(DIST_VERSION) ($(CONFIG_VENDOR)/$(CONFIG_PRODUCT))" > etc/DISTNAME

        mkdir -p $(ROMFSDIR)
        for i in $(ROMFS_DIRS); do \
                [ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)/$$i; \
        done
        $(ROMFSINST) -s /etc/crontab /var/spool/cron/crontabs/root ※この行を追加

crond を起動する初期化スクリプトを自動実行するように下記の箇所を修正します。

endif
        $(ROMFSINST) -s /etc/init.d/misc /etc/rc.d/S99misc
        [ "$(CONFIG_USER_FLATFSD_FLATFSD)" != "y" ] || \
        $(ROMFSINST) -s /etc/init.d/rc.local /etc/rc.d/S99rc.local
        $(ROMFSINST) -s /etc/init.d/crond /etc/rc.d/S99rc.crond  ※この行を追加

4.crond を起動する初期化スクリプトをプロダクトディレクトリに追加。

プロダクトディレクトリ以下の etc/init.d/crond というファイル名で追加します。

vi atmark-dist/vendors/AtmarkTechno/my-product/init.d/crond
#!/bin/sh

. /etc/init.d/functions

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

echo -n "Starting crond: "
crond
check_status

5.make

[ATDE5:~/atmark-dist]$ make

6.イメージファイルの書き込み

こちらを参考にイメージファイルを書き込んでください。

7.実行スクリプトを作成する。

/etc/config/ディレクトリ以下にhello.shを作成します。

[armadillo ~]# vi /etc/config/hello.sh

今回は定期実行がわかり易いように、hogehogeというファイルに現在時刻を上書きするスクリプトを作成します。

#!/bin/sh
date > /root/hogehoge

作成したシェルスクリプトに実行権限を与えます。

[armadillo ~]# chmod +x /etc/config/hello.sh

8.コンフィグ領域の保存

保存されるファイルは、「/etc/config」ディレクトリ以下のファイルです。

[armadillo ~]# flatfsd -s

9.反映

armadilloの再起動、またはプロセスを削除した後、下記コマンドを実行します。

[armadillo ~]# /etc/init.d/crond start

10.確認

毎分ごとに、rootディレクトリ以下の「hogehoge」ファイルの時刻が更新されていることをご確認ください。(時間は一例です)

[armadillo ~]# cat hogehoge
Mon Oct 28 14:15:01 JST 2019