12: Intel Edisonの中でcronを動かしたい

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。組み込みの世界ってこうなんですね。デフォルトではcronが入ってない…。

cronieのインストール

まぁ要は、自分でインストールせよということなので、インストールします。opkgの設定は済ませておきましょう。

opkgさえきちんと導入されていれば、コマンド一発です。

# opkg install cronie

結果として、以下のようなファイルが配置されました。

# opkg files cronie
Package cronie (1.4.11-r0) is installed on root and has the following files:
/etc/cron.hourly/
/etc/cron.monthly/
/etc/cron.d/
/etc/cron.deny
/usr/sbin/crond
/etc/cron.daily/
/etc/init.d/
/etc/crontab
/etc/init.d/crond
/etc/sysconfig/
/etc/cron.weekly/
/var/spool/cron/
/usr/bin/crontab
/etc/sysconfig/crond

ただし、Yocto Linuxはinitではなく、systemdベースです。/etc/init.d/crondが導入されましたが、これはそのままでは使えません。

systemdへの登録

従って/lib/systemd/system/crond.serviceファイルを自前で作る必要があります。

# tee << _EOF_ >/lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=syslog.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS

[Install]
WantedBy=multi-user.target
_EOF_

このファイルを作っただけではまだ起動しません。disabled状態です。

# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/lib/systemd/system/crond.service; disabled)
   Active: inactive (dead)

これを、有効化(chkconfig on的な)して、起動(service start的な)します。

# systemctl enable crond
# systemctl start crond

するとcrondプロセスが上がります。

# ps | grep crond
 1096 root      2736 S    /usr/sbin/crond -n
 1098 root      2416 S    grep crond

ステータスも、enabled / activeになりました。

# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/lib/systemd/system/crond.service; enabled)
   Active: active (running) since Thu 2014-12-12 00:29:04 UTC; 49s ago
 Main PID: 1096 (crond)
   CGroup: /system.slice/crond.service
           └─1096 /usr/sbin/crond -n

動作検証

では、crontab -eコマンドで、下記のような設定をしてみましょう。

* * * * * touch /tmp/hoge_`date +\%Y\%m\%d\%H\%M\%S`

以下のように、毎分 *1新しいファイルが出来上がることが確認できました。

# ls -la /tmp/hoge*
-rw-r--r--    1 root     root             0 Dec 12 00:33 /tmp/hoge_20141212003301
-rw-r--r--    1 root     root             0 Dec 12 00:34 /tmp/hoge_20141212003401
-rw-r--r--    1 root     root             0 Dec 12 00:35 /tmp/hoge_20141212003501

まとめ

これで、時間に応じて周期的に何かをさせることも出来るようになりました。ちなみに、initばかりに慣れている状態で、systemdの諸々をほぼ初めて触りましたが、意外にすんなり使えましたよー。

明日のエントリーはこちらです。

脚注

  1. ただし、1秒ほど遅延があるようですね。