cronでphpを動かすとNo entry for terminal type “unknown”;とか表示される

cronが動くときTERM=unknowに設定されているみたいで、phpによって表示される。のでTERMに何も設定しないかxtermを設定すれば出なくなる。

crontab -eのエントリの例

Ubuntuでシステムがビジー過ぎたときリブートする

monitを調べてみたがシステムがビジー状態の時リブートするようなことをするのがどうやっていいかわからなかった、もしかしたらこういう機能はないのかもしれない、ので、自作してみることにした。

このプログラムはcronで定期的に動かして、システムがビジー状態だったらリブートする。ビジー状態の判定は、/proc/loadavgを見ればいいと思う。そこで、C言語で以下のプログラムを作ってみた。

/proc/loadavgの出力は左から、1分、5分、15分の平均負荷なので5分後をみて、それが20を越えていたらリブートするようにした。20は適当に決めたので、これくらいでいいのかはよく分からない。リブートは/sbin/rebootを直接実行するようにした。

コンパイル

/sbin/rebootはルートしか実行できないので、ルートで実行しないとならない。
あとはこれをcronに登録する。/etc/crontabを編集して以下の一行を加えた。

ログとかは全然とってないので、ちゃんと動いているのか調べられない。あとで直したい。

Fedora10のupdatedbを少なくする

Fedora10を使っているとやたらとマシンが忙しくなるのだが、それはupdatedbが動いているためだった。これはlocateプログラムがつかうデータベースを作るもので、locateプログラムとはファイル名の検索に用いられる。そのためファイルを全部走査してデータベースを常に更新する必要がある。

まずupdatedbがどのように実行されるのか調べてみる。

# which updatedb
/usr/bin/updatedb
# rpm -qf /usr/bin/updatedb
mlocate-0.21.1-1.i386
# rpm -ql mlocate
/etc/cron.daily/mlocate.cron
/etc/updatedb.conf
....
#

/etc/cron.daily/mlocate.cronがあるので、anacronから起動されることがわかる。だが/etc/updatedb.confでも設定できるかもしれないのでこっちを見てみよう。

このファイルは「変数=値」の形式で記述してupdatedbの動作を制御するもののようだ。しかしここでの設定はスキャンする対象を限定するためのもののようなので今は関係ない。

よってanacronの設定を変えるのだが、まずanacronとは何かを調べておこう。anacronはつけっぱなしじゃないマシンで自動実行するためのもののようで、cronよりも簡単に設定できるやつみたいだ。

/etc/cron.daily/に置いたファイルは1日毎に実行されるようだ。そしてcron場合は指定時間にマシンが起動していない場合は無視されるが、anacronの場合は一日に一回は起動するっていう意味になるのだと思う。

そこで今回は、/etc/cron.daily/mlocate.cronを/etc/cron.weeklyに置くことで対応しようと思う。

# mv /etc/cron.daily/mlocate.cron /etc/cron.weekly/