httpd.conf にホストを登録する設定方法

2010年4月 3日 22:54 httpd.conf にホストを登録する設定方法

httpd.conf にホスト名を登録して、Apache で指定のホスト名でアクセスできるように設定する方法の解説です。

httpd.conf に下記のように追記することで、設定可能です。

<Host www.abe-tatsuya.com>
ServerName www.abe-tatsuya.com
DocumentRoot /home/tatsuya/abe-tatsuya.com/public_html
</Host>

「ServerName」には設定したいホスト名を、「DocumentRoot」にはそのホスト名でアクセスできるようにしたいディレクトリのパスを指定します。

関連するブログ記事
カテゴリー
Linux/UNIX | レンタルサーバー
タグ
Apache | Host | httpd.conf | UNIX | コマンドライン

コメント(11)

 

サーバー上で FTP を自動実行する方法

例えば、 abe-tatsuya.com というサーバーのバックアップデータを、定期的に FTP で別の goodhope.jp というサーバーにコピーしておきたい、というような時に使う、自動実行処理の方法です。

まず、以下のようなシェルスクリプト(というほどのものでもないですが)を用意します。
今回は、goodhope.jp というサーバーに対して、 backup.tgz というデータをFTPで転送すると仮定します。

#-- 転送先サーバーを指定
/usr/bin/ftp -n goodhope.jp << _EOF_
#-- FTP のユーザー名とパスワードを指定
user username password
#-- バイナリモードで転送
bin
#-- ローカル側サーバーのカレントディレクトリを移動
lcd /usr/home/tatsuya/BackUp
#-- 転送先サーバーのカレントディレクトリを移動
cd /usr/home/goodhope/BackUp
#-- データを転送
put backup.tgz
#-- 終了
bye
_EOF_

各種 FTPコマンドに関しては、超初級ftpコマンドリファレンスなんかを参考にして頂ければ。

というわけで、上記のように記述したファイルを、例えば ftp.sh というファイル名で、データ転送元サーバーに置いておきます。
後は cron で定期的に ftp.sh を実行すればOK。
今回は例として、/usr/home/tatsuya/sh というディレクトリに置いたことにしておきます。

#-- 毎日午前5時に実行する場合
0 5 * * * /bin/sh /usr/home/tatsuya/sh/ftp.sh

cron の設定に関しては、crontabの設定方法などを参考にどうぞ。

これで、毎日午前5時に、自動的にバックアップデータを FTP で別サーバーに転送する、という処理が設定完了です。
もちろん逆に、定期的に別サーバーのデータを転送して取得する、ということも可能です。

関連するブログ記事
カテゴリー
Linux/UNIX
タグ
crontab | FTP | UNIX | アップロード | コマンドライン | シェル | ダウンロード | レンタルサーバー

コメント(8)

 

さくらのレンタルサーバでメール受信時にスクリプトを起動させる方法

以前、メール受信時に perl スクリプトを起動して自動処理させる方法とかメール受信時に PHP スクリプトを起動して自動処理させる方法なんかを書きましたが、今回は、具体的に特定のレンタルサーバー(さくらのレンタルサーバ)で、メール受信時にスクリプトを起動させる方法を書いてみようと思います。

自分のアカウントのメールアドレスを確認する

さくらのレンタルサーバのサービスで、普通にメールアカウントを追加しても、メールサーバーとWebサーバーが分かれているため、そのままではメール受信時にWebサーバー上のスクリプトを起動させることができません。

しかし、さくらのレンタルサーバでは、申込時には通知されませんが、Webサーバーアカウントに対して、ひとつメールアドレスが発行されています。
このアドレスを使用して、受信時にスクリプトを起動させることができます。

というわけで、そのWebサーバーアカウントに割り当てられた、自分のメールアドレスがどんなアドレスなのか確認する方法を説明します。

まず、コントロールパネルにログインします。
「サーバ情報の表示」⇒「サーバに関する情報」と進むと、以下のような画面が表示されるかと思います。

さくらのサーバ・コントロールパネル1

一部画像を修正してありますが、こんな感じの画面が表示されます。

今回必要となる情報は「ホスト名」の部分です。
「www.****sakura.ne.jp」(****は数字)と表示されているかと思います。

これが本来の Webサーバーのホスト名になります。
このホスト名の前に、自分のサーバーアカウント名(FTP や SSH でログインする際に使用するユーザー名)と @(アットマーク)をつけたものが、あなたの Webサーバーのメールアカウントになります。

例えば、Webサーバーのホスト名が「www.9999sakura.ne.jp」で、サーバーアカウント名が「abetatsuya」なら、メールアドレスは「abetatsuya@www.9999sakura.ne.jp」になります。

 

Webサーバーのメールアドレスに転送するためのメールアカウントの作成

上記で確認したメールアドレスを、直接スクリプト同様のメールアドレスとしてもいいのですが、Web上に公開しているサービスで、メールから起動するスクリプトを使うような場合は、このアドレスを公開するのはあまりお勧めできません。

別にスクリプト起動専用のメールアドレスを作成して、そのアドレスから、上記の Webサーバーのメールアドレスに転送するようにしておくのが無難かと思います。

というわけで、再びさくらのレンタルサーバのコントロールパネルに入り、「メールアドレスの管理」から一つメールアカウントを作成し、そのアカウントから「xxxxx@www.****sakura.ne.jp」に転送するように設定しておきましょう。

スクリプトのパーミッションの変更

実際にメール受信時に起動されるスクリプトのパーミッションを変更しておきましょう。

オーナーに実行権限が必要なので、「700」とか「755」とかにしとけば良いかと。

.forward の設定

SSH でログインし、vi 等で ~/.forward を以下のように編集します。

| /home/userame/dirname/scriptname

「|」(縦棒)を書いて、半角スペースを入れて、起動するスクリプトをフルパスで書けばOKです。

以上で設定は完了です。
コントロールパネルで作成したメールアドレス宛にメールを送れば、用意したスクリプトが起動されるはずです。

関連するブログ記事
カテゴリー
Linux/UNIX | レンタルサーバー
タグ
.forward | sendmail | SMTP | UNIX | さくらのレンタルサーバー | コマンドライン | シェル | メール | レンタルサーバー

コメント(2)

 

メール受信時に perl スクリプトを起動して自動処理させる方法

メールが届くと同時に何らかのアクションを起こすプログラムというのは、かなり作る機会の多い部類に入るかと思います。

ここ数年で特に多いものだと、ケータイ向けサイトの案件で、空メールを受信したら自動でユーザー登録用のフォームのアドレスを書いたメールを、空メール送信者に送る、みたいなものとか、ブログやSNSの日記なんかを、ケータイメールで投稿できるようにする処理とかですね。
そして王道の自動返信メールとか。

後、途中で飽きちゃったんですが、昔、送られてくるメールの内容を自分で学習して言葉を覚えて、文章を生成して返信する bot (人工無脳)を趣味で作ってたことがあります。

で、実際こういう「メールを受け取ったら何らかの処理を自動で行なう」という機能を実現するには、どうすれば良いかというと、

  1. 特定のメールアカウントにメールが届いた際に、何らかのプログラムが起動するように設定する
  2. そのプログラムを書く

という二つのステップが必要になります。

まずは、この1ステップ目の「特定のメールアカウントにメールが届いた際に、何らかのプログラムが起動するように設定する」方法について、簡単にまとめてみます。

aliases を使う場合

aliases の設定と使い方についてのメモにも書きましたが、下記のようにすることで、特定のアカウントに届いたメールを、パイプを使って直接何らかのプログラムに渡して実行することができます。

entry: "|/home/tatsuya/entry.pl"

上記の例では、「entry」というメールアカウントにメールが届いた際に、自動的に「/home/tatsuya/entry.pl」という perl スクリプトが起動するように設定しています。

~/.forward を使う場合

サーバーの各ユーザーアカウント毎に、個別に設定が可能な ~/.forward を使う場合は(レンタルサーバーを使う場合はこちらの方が利用する機会が多いかもですね)、~/.forward に以下のように書けばOKです。

"|exec /home/tatsuya/entry.pl"

procmail を使う場合

届いたメールに対して、自動でマッチング処理等を行なって、結果によって行なう処理を振り分けてくれる便利な存在である procmail を使う場合は、~/.procmailrc に以下のように書きます。

:0 :
* ^To: entry
| /home/tatsuya/entry.pl

^To: entry」の部分は正規表現が使えるので、メールのヘッダ(FromやSubject等)に対して細かい条件を設定して振り分けることで、一つのメールアカウントで様々な処理を行なうことができるのも良いですね。

メールを処理する perl スクリプトの書き方

さて、続いて第2ステップ「そのプログラムを書く」の部分です。

aliases、~/.forward、procmail の三種類の設定方法を紹介しましたが、どの方法を用いても、「指定したプログラムの標準入力に、受け取ったメールの内容を渡す」というのは同じです。

つまり、受け取る側の perl スクリプトでは、標準入力の内容を読めば良いだけです。

while(<STDIN>){
	#-- 「$_」にメールの内容(ヘッダも本文も添付ファイルも全て)が
	#-- 一行ずつ代入されていくので、正規表現とかを使って色々処理する
}

これだけです。

後は、「メール送信者のアドレスをデータベースに登録しておいて、ユーザー登録用のURIを生成してメールを返信する処理を書く」とか、「メール送信者のアドレスからユーザーIDを引っ張ってきて、メール本文の内容をそのユーザーIDの日記に投稿させる」とか、「本文を形態素解析して、内容を bot (人工無脳)に覚えさせる」とか、色々とやれば良いわけです。

関連するブログ記事
カテゴリー
Linux/UNIX | perl/CGI
タグ
.forward | aliases | perl | procmail | sendmail | SMTP | UNIX | ケータイメール | コマンドライン | メール | モバイル | レンタルサーバー | 人工無脳

コメント(14) | トラックバック(3)

 

aliases の設定と使い方についてのメモ

順番的には、virtmapsの設定と使い方についてのメモよりも先にこっちを書くべきだったかなぁ、とか思ったりもして、とりあえず今回は aliases についてのメモです。

aliases とは

/etc/aliases (VPS の場合は ~/etc/aliases) にある設定ファイルのことです。

このファイルを編集することで、sendmail のメールアカウントに対して、別名(エイリアス)を設定することができます。

aliases の設定方法

例えば、「info」というアカウント宛のメールを、実際には「webmaster」というアカウントに配送したい、という時には、

info: webmaster

と書きます。

同一サーバー内ではなく、別のドメインのメールアドレス等に転送をしたいという場合は、

info: another@domain.com

のようにすれば、「info」宛のメールを「another@domain.com」に直接転送できます。

さらに、サーバーのメールボックスに保存しつつ転送、ということも可能です。
その場合、

info: webmaster, another@domain.com

と書けば、「info」宛のメールを「webmaster」のメールボックスに保存しつつ、「another@domain.com」に転送できます。

また、

junk: /dev/null

という風に、配送先を/dev/nullに指定すると、どこにも届かなくなるので、ムダなエラーメール・SPAMメールのログで容量を取りたくない、なんて時には virtmaps のワイルドカードと組み合わせる事で、役に立つかもしれません。

届いたメールを、パイプを使って直接何らかのプログラムに渡して実行することもできます。

autoresponse: "|/usr/bin/autoresponse-script"

等と設定すれば、「autoresponse」というアカウント宛のメールが届いた時に、自動で「/usr/bin/autoresponse-script」というプログラムが実行されます。

特定のメールに対する自動返信スクリプト等を書いた際に便利ですね。

設定ファイルを編集した後は、シェル上で、

% newaliases

というコマンドを実行すれば、設定が反映されます。

ただし、VPS(バーチャル・プライベート・サーバー)の場合には、

% vnewaliases

というコマンドになります(VPSにもよるんでしょうけど)。

aliases でできないこと

virtmaps の設定と使い方についてのメモでも書いた通り、 aliases では所謂「バーチャルドメイン」とか「バーチャルサブホスト」等と呼ばれる、複数ドメインをひとつのサーバーアカウントで管理する場合には、その「複数ドメイン」という概念に対応できません。

「goodhope.jp」と「abe-tatsuya.com」という二つのドメインを管理していた場合、 aliases で、

hatsunemiku: miku

と設定していたら、「hatsunemiku@goodhope.jp」宛のメールも「hatsunemiku@abe-tatsuya.com」宛のメールも、どちらも「miku」というアカウントに配送されてしまいます。

aliases だけでは異なるドメインのメールアカウントに対しての別名(エイリアス)を設定することはできないので、それを実現するためには virtmaps を使う必要があります。

ただし、 virtmaps の方はパイプを使って、メール受信時に直接プログラムを起動するようなことができないので、どちらも併用することになるでしょう。

ちなみに、メールが届いた際に処理される順番は、 virtmaps ⇒ aliases の順番です。

関連するブログ記事
カテゴリー
Linux/UNIX
タグ
aliases | sendmail | SMTP | UNIX | virtmaps | VPS | コマンドライン | シェル | メール | レンタルサーバー

コメント(12)

 

virtmapsの設定と使い方についてのメモ

virtmaps とは

同一サーバーで、複数のドメインを利用する、所謂バーチャルドメインとかバーチャルサブホストとか、そんな感じで呼ばれているやつで使います。

SMTPサーバーは、このバーチャルドメインとかバーチャルサブホストとか呼ばれるものを処理できないらしいです。

例えば、僕が使っているこのレンタルサーバーで、今「abe-tatsuya.com」(このブログのドメインですね)と「goodhope.jp」(仕事の方のサイトのドメインです)の二つを管理しています。

その場合、Apache(Webサーバー)は、「abe-tatsuya.com と goodhope.jpは別物だ」と理解していますが、SMTPサーバーの方は、「hatsunemiku@abe-tatsuya.com と hatsunemiku@goodhope.jp は、どちらも同じうちのサーバーの hatsunemiku アカウント宛のメールだ」としか理解できません。
つまり、どっちのドメイン宛にメール出しても「hatsunemiku」という同一のメールボックスに届くわけです。

これだと、複数のドメインの「info@~~」とか「webmaster@~~」とか「support@~~」みたいな、よくあるわかりやすいメールアドレスを、それぞれ別のメールボックスで管理できなくて不便ですよね。

それを解決するのが、 virtmaps です。

virtmaps の設定方法

~/etc/virtmaps という設定ファイルを編集することで、virtmaps の挙動を設定することができます。

基本的な使い方は簡単。例えば上記の例の場合なら、

hatsunemiku@abe-tatsuya.com	hatsunemiku_a
hatsunemiku@goodhope.jp	hatsunemiku_g

という二行を追加すれば、「hatsunemiku@abe-tatsuya.com」宛のメールは「hatsunemiku_a」というメールボックスへ。「hatsunemiku@goodhope.jp」宛のメールは「hatsunemiku_g」というメールボックスへ。それぞれ渡されます。
※もちろん、事前に「hatsunemiku_a」「hatsunemiku_g」というメールアカウントを作成しておく必要があります。

設定ファイルを編集したら、シェル上で、

% vnewvirtmaps

というコマンドを実行すれば、編集した設定が反映されます。

また、ちょっと便利な使い方としては、例に出した「hatsunemiku@goodhope.jp」なんていうメールアドレスの場合、メール送信者がアドレスを直接入力して送ろうとした際に、間違って「hatunemiku@goodhope.jp」宛に送ってしまう、というようなことは、ありがちですよね。

こういう時に、

hatsunemiku@goodhope.jp	hatsunemiku_g
hatunemiku@goodhope.jp		hatsunemiku_g

としておけば、スペルミスの方のメールアドレスでも、ちゃんとメールボックスにメールが届きます。
(まあこれは本来 aliases で設定するべきものかもですが……それを複数ドメインで実現するには virtmaps じゃないと無理ですよね)。

それと、 virtmaps ではドメイン名でのワイルドカードが使えるので、

abe-tatsuya.com	tatsuya

としておくと、「aaaaa@abe-tatsuya.com」だろうが「kameda-brothers@abe-tatsuya.com」だろうが、そのメールアカウントを作っている・作っていないおかまいなしに、全ての「abe-tatusya.com」ドメイン宛のメールが「tatusya」のメールボックスに届きます。
※もちろん「tatsuya」というメールアカウントだけは作っておかないといけませんが。

なお、virtmaps の設定ファイルは、上から順に判定されていき、マッチした時点で処理され、そこから先は判定されません。
ですので、

abe-tatsuya.com		tatsuya
hatsunemiku@abe-tatsuya.com	hatsunemiku_a

とやっちゃうと、「hatsunemiku@abe-tatsuya.com」宛のメールも一行目の条件にマッチしてしまうため、「hatsunemiku_a」には届かず「tatsuya」に届いてしまいます。

virtmaps でできないこと

まず、正規表現は使えません。

正規表現が使えたら、何かのWebアプリケーションの動作確認テストとかで大量にメールアドレスを作って、新規登録のエラーパターンを試したい、とかいう時に、

test\d{3}@goodhope.jp	test

とか設定できると、凄く便利なんですけどね……。

それと、届いたメールを、パイプを使って何らかのプログラムに渡すようなこともできません。

Webアプリケーション側で、ランダムな文字列でメールアドレスを生成して、そのアドレス宛にユーザーからメールを送ってもらうことで、何らかの認証をする、なんていう仕組みは、特に携帯関連でこれからどんどんニーズが高まっていくと思いますが(mixiとかOpenPNEなんかも携帯での投稿機能をそれで実現してますよね)、それを virtmaps だけで実現することは出来ません。

mobile-service.com	"|/home/tatsuya/mail-filter.pl"

みたいなことができたら、凄く便利なんですけどね……。

ただ、これには抜け道があります。
virtmaps と aliases では、virtmaps が先に処理されて、その後 virtmaps によって振り分けられたアカウントに対して、aliases での設定が処理されるからです。

aliases ならパイプが使えるので、 virtmaps には

mobile-service.com	mailfilter

みたいな感じで、全てのメールを mailfilter アカウントに渡すようにしておいて、 aliases の設定ファイルに、

mailfilter: "|/home/tatsuya/mail-fileter.pl"

という風に「mailfilter」というアカウント宛のメールを「/home/tatsuya/mail-fileter.pl」に渡すように設定しておけば、結果的に「mobile-service.com」ドメイン宛の全てのメールを、「/home/tatsuya/mail-fileter.pl」というプログラムに渡して、何らかの認証処理等を行うことができるわけです。

関連するブログ記事
カテゴリー
Linux/UNIX
タグ
aliases | OpenPNE | sendmail | SMTP | UNIX | virtmaps | VPS | ケータイメール | コマンドライン | シェル | メール | モバイル | レンタルサーバー

コメント(7)

 

crontabの設定方法

2007年10月16日 23:59 crontabの設定方法

今回は旧ブログから記事を引っ張ってきました。

cronの設定に関するメモ書きです。


予め定められたスケジュール通りに、定期的に処理を実行する cron 。
この名前はギリシャ神話の時の神クロノスから取ってるそうな。
以下、FreeBSDでのcron利用方法。

現在登録しているスケジュールの設定を表示するには、シェル上で、

% crontab -l

とする。

スケジュール設定を編集する時は、

% crontab -e

とすると、エディタが起動し、設定ファイル編集画面になる。

設定ファイルの記述方法は、一行につきひとつのスケジュールで、
分 時 日 月 曜日 コマンド
という形式。
「分 時 日 月 曜日」のそれぞれには * が使える。

例えば、サーバーのアクセスログを解析する /home/amethyst/src/analyze.pl というperlスクリプトを作った後、それを毎日朝の5時に実行したい、という時は、

0 5 * * * /usr/local/bin/perl /home/amethyst/src/analyze.pl

とすれば良い。

曜日は0が日曜で6が土曜となる。
毎週月曜と木曜の13時にcommandを実行したいなら、

0 13 * * 1,4 command

となる。
上記の例のように、コンマで区切ることで複数の条件を指定することができる。

標準出力に出力されるコマンドの実行結果は、設定したアカウントのメールアドレス宛に送信される。
結果をメールで受け取りたくない場合は、出力を /dev/null に渡せば良い。

0 13 * * 1,4 command 1> /dev/null

上記のように設定しても、標準エラー出力に対する出力(要するに何らかのエラーがあった際のメッセージ)はメールで送信される。
エラー出力もメールで受け取りたくい場合は、

0 13 * * 1,4 command /dev/null 2>&1

とすれば良い。

cronからのコマンド実行時は環境変数がほとんど設定されないことが多いので、cronから直接コマンドを実行するよりも、最初からシェルスクリプト内に環境変数設定とコマンドを書いて、cronからそのシェルスクリプトを実行した方が余計な手間が省けることが多い。


ここまでが旧ブログの記事。

ここからは今回の追記です。

例えば、10分毎になんらかのプログラムを起動するするように設定したい場合、

0,10,20,30,40,50 * * * * command

と書けばいいわけですが、ちょっとめんどくさいですよね。

そういう場合は、

*/10 * * * * command

と書けば、10分毎にcommandが実行されます。

関連するブログ記事
カテゴリー
Linux/UNIX
タグ
crontab | FreeBSD | UNIX | コマンドライン | シェル

コメント(4)