cronによるバッチ処理は決まった時間にしか処理できない。
これを例えば、
「手動でお知らせメールを送ってるように見せたい」などの理由で
毎日10:00~18:00の間で毎日1回メール送信したい、
のときにはこんな方法でやってみる。
# vim /etc/crontab 00 10 * * * root /home/quall/dayinfomail.sh
# vim /home/quall/dayinfomail.sh #!/bin/bash BASE_INT=`expr $RANDOM + 480`; RANDOM_MINUTES=`expr $BASE_INT % 480`; at -f sendmail.php now + $RANDOM_MINUTES minutes
で、sendmail.phpにメール送信の内容を書く。
で、自宅環境だと問題なく動作するのに、別環境だと全然動かない。。
調べてみると、シェルスクリプトでシンタックスエラーが。。。
# sh /home/quall/dayinfomail.sh expr: syntax error expr: syntax error at: garbled time
どうやら、$RANDOM
で参照できていないご様子。
$ man sh
でもやっぱり変数リストに入っていないご様子。
デフォルトのシェルを見てみる。
$ echo $SHELL /bin/csh
デフォルトはbashではなくcshでした
$ echo $SHELL /bin/csh $ vim /etc/shells /bin/sh /bin/csh /bin/tcsh
なんとまぁbash自体入っていない。。。
bashインストールをできない環境だったので、
しかたなくPHP側でランダム時間に処理をすることにしましたw
残念。。
※2009年9月2日追記
at -fはシェルスクリプト以外を実行できないようなので、phpを実行するためのシェルスクリプトを間に含む必要がありました。。
No related posts.