Unix系サーバーから定時にメールを送信したいと思っています。


 私がすぐに考えついたのが

・cronでsendmail,postfixなどを実行

ですが、これ以外に何か方法はないでしょうか。

回答の条件
  • 1人2回まで
  • 登録:2006/06/28 10:09:01
  • 終了:2006/06/29 09:07:17

ベストアンサー

id:toohigh No.1

toohigh回答回数291ベストアンサー獲得回数372006/06/28 10:39:39

ポイント35pt

「cron が使えるサーバから wget などで定期的にメール送信したいサーバにアクセスして、CGI などでメール送信を行わせる。」というのも可能かと思います。メール送信を行いたいサーバが cron 利用不可の場合に使われそうな方法です。


他にも、「直接 smtp をしゃべるプログラムを cron から起動する」も可能ですね。sendmail, postfix などの MTA が導入されていないサーバの場合にはあり得る選択肢かと思います。

どちらにせよ、一番素直でわかりやすいのは、質問者さんが挙げておられる「cron から sendmail/postfix などを実行する」または、sendmail/postfix などの代わりに /usr/bin/mail などのコマンドを実行する、だと思います。

id:GattoMano

回答ありがとうございます。

 なるほど、確かに別サーバーからのアクセスで、という方法はありましたね。

 このプログラムを実行したいと思っているサーバーでcronが使えないため、

このような質問をさせていただきました。

2006/06/28 10:56:15

その他の回答(1件)

id:toohigh No.1

toohigh回答回数291ベストアンサー獲得回数372006/06/28 10:39:39ここでベストアンサー

ポイント35pt

「cron が使えるサーバから wget などで定期的にメール送信したいサーバにアクセスして、CGI などでメール送信を行わせる。」というのも可能かと思います。メール送信を行いたいサーバが cron 利用不可の場合に使われそうな方法です。


他にも、「直接 smtp をしゃべるプログラムを cron から起動する」も可能ですね。sendmail, postfix などの MTA が導入されていないサーバの場合にはあり得る選択肢かと思います。

どちらにせよ、一番素直でわかりやすいのは、質問者さんが挙げておられる「cron から sendmail/postfix などを実行する」または、sendmail/postfix などの代わりに /usr/bin/mail などのコマンドを実行する、だと思います。

id:GattoMano

回答ありがとうございます。

 なるほど、確かに別サーバーからのアクセスで、という方法はありましたね。

 このプログラムを実行したいと思っているサーバーでcronが使えないため、

このような質問をさせていただきました。

2006/06/28 10:56:15
id:kousuke33 No.2

kousuke33回答回数5ベストアンサー獲得回数02006/06/28 22:12:32

ポイント35pt

だいたい定時ってのでいいなら、

どこかのディレクトリに日付ファイルを作成するのが成功したらプログラムを起動するというようなcgiを作成して、

http://www.cman.jp/network/

とかからアクセスしてもらうってのはどうでしょうか?(DBとか使ってもできますね)

#ちょっと反則な感じですけどね。

id:GattoMano

 回答ありがとうございます。

確かにちょっと反則気味ですね(笑)

 私も質問してからも調査していたのですが、

・定時実行

・一つのサーバーで完結

 という条件を満たそうとすると、どうしてもcron使わないと難しそうですねえ。

 cron使えないサーバーでこういうことしたい、ってことに無理がありそうだということがよくわかりました。

 みなさまありがとうございました!

2006/06/29 09:05:59
  • id:bonlife
    回答が間に合いませんでしたが、行いたい処理(メール送信)をシェルにまとめ、atコマンドで実行すれば良いと思います。

    単純にatを使うだけだと1度しか実行されません。
    シェルの中で次回実行日時を算出し(dateの応用)、atコマンドをシェル内で実行してスケジュールを行えば良いと思います。

    [参考URL]
    http://sonic64.com/2004-08-31.html
    http://sonic64.com/2003-10-29.html

    例えば、毎日12:00に処理を実行したいのであれば、以下のようにdateの出力結果を加工してatコマンド用に日付文字列を生成します。

    -----
    # 翌日の日付を取得
    NEXT_DAY=`date --date '1day' +"%d/%m/%Y"`
    # 実行時間を設定 (結合しやすいように最初に半角スペース)
    PROCESSING_TIME=" 12:00"
    # 上記の2つの値を合わせて次回実行時間を生成
    NEXT_PROCESSING_TIME=$NEXT_DAY$PROCESSING_TIME
    echo $NEXT_PROCESSING_TIME
    -----

    atコマンド用の日付文字列が生成できたら、後は実行するシェルの中にatコマンドの処理を記述し、自分自身を再度実行するようにスケジュールすれば良いです。

    -----
    echo $0 |at $NEXT_PROCESSING_TIME
    -----

    手元にLinuxの環境がなく、試せていませんが、AIXにておよそ同じような処理が行えることは確認しております。

    参考になれば幸いです。
  • id:GattoMano
     なるほど、atという手もありましたか。
     レンタルサーバーでしようとしてたので、
    これも使えないには違いないのですが(苦笑)

     参考になりました、ありがとうございました!
  • id:bonlife
    そ、そうでしたか…。
    レンタルサーバでcronもtelnetも使えないということですね。
    試したことはないのですが、PHPの擬似cronもあるようです。

    http://phpspot.org/blog/archives/2005/11/croncronphp_pse.html

    こういったことを考えるとcronもtelnetも使えるさくらインターネットは楽ですね。
    (PHP5が使えないのがちょっとアレですが。)
  • id:GattoMano
    >PHPの擬似cron
    ありがとうございます。

     見てる限りではアクセスがある程度以上あるサイトでないと厳しそうですね。アクセスしてもらって動かす、って感じですし。

     他にはrssチェックサイトに登録しておいて、
    phpを偽装して動かす、って方法を見つけました。
    まぁ、http://www.cman.jp/network/ のやり方とあまりかわりはないのですが(^^);

     さくらインターネットはcron使えるんですね、知りませんでした。
    ちょっと調べてみます、ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません