• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/55

RailsCronプラグインを利用すると、定期的に繰り返される処理を簡単に実装する事ができます。 普通はこのような事を実現する為に cron を使う事が多いと思いますが、Railsアプリケーションは起動しっぱなしで使う事が多いので、こういう方法もありですね。

使い方はいたって簡単です。まずはプラグインをインストールします。

./script/plugin install -c http://svn.kylemaxwell.com/rails_cron/trunk/
続いて、lib/cron.rb を記述します。
module Cron
  def Cron.create_do_something_cron
    RailsCron.create(
      :command => "Cron.do_something",
      :start => Time.now,
      :every => 10.second)
  end

  def Cron.do_something
    # some works
  end
end
続いて、RailsCronを初期化します。
rake cron_start
これによって、rails_cronsテーブルが存在しない場合は作成され、ウェブサーバが再起動します。 そして実際にRailsCronオブジェクトを作成及び登録します。
./script/console
>> Cron.create_do_something_cron
RailsCronはActiveRecordオブジェクトなので、以上でDBに登録されます。

RailsCronプラグインを導入すると、下記のようなrakeターゲットが追加されます。

  • cron_start -- RailsCronをデーモンとして起動
  • cron_foreground -- RailsCronをフォアグラウンドで起動
  • cron_stop -- 正常(Graceful)に停止
  • cron_kill -- プロセスをkill
  • cron_graceful -- 正常に再起動
  • cron_restart -- プロセスをkillして再起動
  • cron_status -- ステータスを表示

cron を実行するユーザを指定したい場合は、RAILSCRON_SUDO環境変数を設定すると良いようです。詳細はこの辺に書かれています。 また、production環境で実行する場合は、RAILS_ENVの指定を忘れないように注意する必要があります。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/55

posted by Png genki on Thu 29 Jun 2006 at 18:02

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/54

以下は自分用にLife with qmailの内容を要約したものです。

まず、ソースファイルを/usr/local/srcにダウンロードし、展開します。

cd /usr/local/src
wget http://www9.jp.qmail.org/netqmail-1.05.tar.gz
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
それぞれを展開。
tar xvzf netqmail-1.05.tar.gz
tar xvzf ucspi-tcp-0.88.tar.gz
tar xvzf daemontools-0.76.tar.gz

最初はqmailから。

cd netqmail-1.05
./collate.sh
mkdir /var/qmail
mkdir /etc/qmail
ln -s /etc/qmail /var/qmail/control
cd /usr/local/src/netqmail-1.05/netqmail-1.05
cp INSTALL.ids IDS
ここで、IDSの中身から下記のものを選ぶ(構成に応じて変更すること)
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails
余談ですが、先頭のコメント部分の一括削除等は vim のVISUAL BLOCKモードだと作業がしやすいです。そして、
chmod +x IDS
./IDS
make setup check
./config-fast <メールアドレスの@の右側に来るところ>
これで qmail は完了。続いて ucspi-tcp のインストールです。
cd /usr/local/src/ucspi-tcp-0.88
patch < ../netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
make
make setup check
そして daemontools のインストール。
cd /usr/local/src/admin/daemontools-0.76/src
patch < ../../../netqmail-1.05/other-patches/daemontools-0.76.errno.patch
cd ..
package/install
以上でインストール作業は完了です。

さて、続いてnetqmailの設定を行います。 /var/qmail/rcを次のように記述します。

#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"
続いて、
chmod 755 /var/qmail/rc
mkdir /var/log/qmail
echo ./Mailbox >/var/qmail/control/defaultdelivery
次に、/var/qmail/bin/qmailctlファイルを下記から持ってきます。
cd /var/qmail/bin
wget http://lifewithqmail.org/qmailctl-script-dt70
mv qmailctl-script-dt70 qmailctl
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
続いて、superviserディレクトリの設定を行います。
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
echo '#!/bin/sh' >> /var/qmail/supervise/qmail-send/run
echo 'exec /var/qmail/rc' >> /var/qmail/supervise/qmail-send/run
echo '#!/bin/sh' >> /var/qmail/supervise/qmail-send/log/run
echo 'exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail' >> /var/qmail/supervise/qmail-send/log/run
echo '#!/bin/sh' >> /var/qmail/supervise/qmail-smtpd/log/run
echo 'exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd' >> /var/qmail/supervise/qmail-smtpd/log/run
続いて/var/qmail/supervise/qmail-smtpd/runファイルを次のように記述します。
#!/bin/sh

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
    echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
    echo /var/qmail/supervise/qmail-smtpd/run
    exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
    echo "No /var/qmail/control/rcpthosts!"
    echo "Refusing to start SMTP listener because it'll create an open relay"
    exit 1
fi

exec /usr/local/bin/softlimit -m 2000000 \
    /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
最後に、
echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming
chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd
ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service
qmailctl stop
echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
qmailctl cdb
既存のMTAをアンインストールします(これは構成によるのでここには書けません)。 あとは、sendmailをqmailで置き換えます。
mv /usr/lib/sendmail /usr/lib/sendmail.old
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin
qmailctl start
以上で設定は完了です。

最後に、qmailctl statを実行して、下記のような感じに起動時間が進んでいることを確認します。

# qmailctl stat
/service/qmail-send: up (pid 29638) 7 seconds
/service/qmail-send/log: up (pid 29648) 7 seconds
/service/qmail-smtpd: up (pid 29637) 7 seconds
/service/qmail-smtpd/log: up (pid 29647) 7 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0
以上で全て完了です。

This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/54

posted by Png genki on Thu 29 Jun 2006 at 02:13
Contents
RailsCronプラグインを使う
netqmailの導入(要約版)
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
瀧内元気: おお、チェックしてみます。thx! '11-12
overisland: Reeder for iPhone もこの UI を実装していますね。 '11-12
瀧内元気: その情報は見たのですが、以下のサイトによると、現在はまた必要になってるっぽいんですよね。 ... '11-12
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ