« plymouth とreadahead-fedora | トップページ | カーネル3.1.2-1 とミラーの更新 »

2011/11/20

fcronをデフォルトcronieの代わりに使う

Archのデフォルトcronはcronieというパッケージです。
これはanacronを取り込んだcronパッケージのようです。デフォルトのanacronを使ってみようとしたのですが、

  • ユーザ毎のタスクを設定出来ない。
  • (これは普通にcronを使えということだと思いますが、この場合タスク実行時に必ず電源が入っている必要があります)
  • 特定ユーザ権限を指定してのコマンド実行が出来ない。

という問題があって、使用をあきらめました。Archにはオフィシャルにfcronという代替えがあるので、そちらを使用することにしました。

fcronの利点

  • 電源が常時入っていなくても、指定した時刻又は間隔が過ぎれば、次の電源ON時にコマンドを実行してくれます。もっともこれはanacron でも可能です。

  • 特定ユーザ権限を指定してのコマンド実行が出来ます。www-data 権限で実行したい!とかいう場合に便利です。Apache サーバ使う時に必要になりますよね。

  • これまでに設定したファイル(/etc/cron.daily /etc/cron.hourly /etc/cron.monthly)はそのままfcron が実行してくれます。

fcronの欠点

  • 唯一の欠点(?):Archに特化したドキュメントが少ない--;
  • いつも頼りになるArchのWikiに情報が全くないです。自分で作れということなんでしょうが・・・。
    というかanacronの情報も無くて、あるのは時代遅れのdcronの情報がだけだったり。
    fcronのドキュメントページがおそらく一番詳しいです。Ubuntuのmanページの方が見やすいかもしれませんが。

まずはインストールです。
sudo pacman -S fcron
デフォルトのcronie は削除する必要があります。まず、エディタをviからnano に変えるためにfcron.conf の編集です。
gksu leafpad /etc/fcron/fcron.conf
editor		=	/usr/bin/nano
セキュリティー上の観点から言えば、/etc/fcron/fcron.deny にall を書いて、/etc/fcron/fcron.allow に編集したいユーザ名を書いておく方が良いですよね。デフォルトでは、deny は空欄でallow は all なので全員が編集出来ます。
gksu leafpad /etc/fcron/fcron.allow
root
username1
username2
・・・
というように、allを消して1行毎に編集を許可するユーザ名を入れます。root を入れておかないと、root 権限のcrontab を編集出来なくなりますので注意。逆に設定編集をしない普段はroot を削っておく方が安全なんでしょうか。次に、
gksu leafpad /etc/fcron/fcron.deny
で、
all
を書きます。下記例のように設定ファイルを用意したら、fcron daemonを起動します。再起動後は勝手に立ち上がってくれます。rc.conf にcrondは必須ですので、書いていない人は忘れないように。
sudo /etc/rc.d/fcron start

以下書き方の例です。

最近入れたreadahead-fedora のプロセス収集を毎月1日に行わせようとする場合には、
sudo fcrontab -e
で、次のように記述します。
%mounthly,mail(no) * * 1 * * touch /.readahead
1日に電源が入っていなくても、1日を過ぎて次に電源が入った時に実行してくれるのがfcron の良いところです。
また、電源断の間に2回同じタスクの実行があった場合には、1回だけ実行されるようです。
これ以外にも、指定したuptime 間隔で作業をさせることも出来ます。例えばuptime が1ヶ月(ここでは4週間の意味になります。30日としたい場合には、 1mの代わりに30d という指定をします)毎に作業をさせたければ、
@mail(no) 1m touch /.readahead
となります。ここではroot 権限でのファイルを説明していますが、
fcrontab -e
で、cron と同様にユーザ毎の設定ファイルが出来ます。もちろんユーザ権限で実行させることが出来るコマンドしか書けないですけど。

user1が user2権限でuptime 1週間(7日)毎にcommand を実行させたい・・・という場合には、root のfcrontab を使います。
sudo fcrontab -e
で、
@mail(no),runas(user2) 1w command
のように書きます。ちなみに、いつもmail(no) オプションを入れているのは自分がsmtp サーバ入れていなくて、いちいちメールの送り先がないよ! とログで怒られるのがうっとおしいからです。
別に気にしないよという人は付けなくて大丈夫です。
オプションの詳しい意味は、fcrontab の説明をどうぞ。
ここではfcron 特有な書き方を説明しましたが、今までのcrontab 記法ももちろん使えます。

« plymouth とreadahead-fedora | トップページ | カーネル3.1.2-1 とミラーの更新 »

Arch Linux」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28800/53288735

この記事へのトラックバック一覧です: fcronをデフォルトcronieの代わりに使う:

« plymouth とreadahead-fedora | トップページ | カーネル3.1.2-1 とミラーの更新 »