bashを介して繰り返し電子メールを送信してユーザーを過度に参照するのを防ぎます。

bashを介して繰り返し電子メールを送信してユーザーを過度に参照するのを防ぎます。

アイデア/実装を改善するのに助けが必要です。シナリオは小規模ローカルISPです。ユーザーアカウントはfreeradius / mysqlに保存されます。割り当てられたクォータの80%を消費したユーザーに電子メールを送信することです。

ダウンロードしたユーザーのmysqlテーブルを確認するために、1時間ごとに実行するようにスケジュールされたbashスクリプトを設定しました。75%クォータを確認し、ユーザー名と電子メールをファイルに追加します。/tmp/overquotauser.txtこのように

user1 [email protected]
user2 [email protected]
user3 [email protected]

ユーザーのアカウントが更新されると、そのユーザーの名前がアカウントから削除されます。/tmp/overquotauser.txt

今私が望むのは、これらのユーザーに電子メールを送信することです。これは簡単ですが、私が望むのは、毎時間ユーザーに電子メールを繰り返すのを防ぐことです。たとえば、ユーザーの使用率が80%の場合、毎時間ではなくユーザーに1つの電子メールを送信する必要があります。これを行う方法を知っていますか?

答え1

次の 2 つの方法のいずれかを使用できます。

I)1時間ごとにファイルを生成します。/tmp/overquotausernew.txtこのファイルを古いファイルと比較してください。/tmp/overquotausernew.txt。新しく作成されたファイルで新しいユーザーが見つかった場合は、そのユーザーにのみ電子メールを送信し、新しく作成されたファイルを比較します。/tmp/overquotauser.txt

これにより、電子メールが送信されるすべてのユーザー名を含む1つのファイルのみが保持されます。スクリプトは、メールが送信されていない新しいユーザーを確認します。

II) メールが送信者であることを確認するためにメールを送信するスクリプトを作成できます。/tmp/overquotauser.txt過去24時間以内に送信されました。メッセージが過去24時間以内に送信された場合、スクリプトは他の操作を行わずにそのユーザーにメッセージを送信します。

答え2

すでにmysqlで作業しているので、mysqlテーブルを使用できます!これくらいのテーブルだと十分だと思う -

create table (
    userid varchar(100),
    useremail varchar(100),
    int mailsent default 0
);

作成者アクションは、このテーブルから行を作成(または削除)します。メールプログラムは、mailsentゼロに設定されたすべての行を抽出してメールを送信し、mailsent1に設定します。

しかし、本物本物本物テキストファイルを使いたいです。一つの方法があります。

  1. 作成者のクローン操作の最初の呼び出しが次のようにファイルを生成するとします。

    user1,[email protected]
    user2,[email protected]
    user3,[email protected]
    
  2. メーラージョブの実行中に、このファイルからEメールIDを含む行を選択し、受信者にメールを送信し、その行からEメールIDを削除します。 (これにはPerlまたはsedを使用できます。作成者は同期的にファイルに書き込みます。)この操作の後、ファイルは次のようになります。

    user1
    user2
    user3
    
  3. しばらくすると、作成者は user4 と user5 という 2 人のユーザーを追加します。今あなたのファイルは

    user1
    user2
    user3
    user4,[email protected]
    user5,[email protected]
    
  4. メーラージョブが再度実行されると、手順2では、EメールIDが0に指定された人にのみEメールを送信します。

このモードはいくつかの方法で動作します。

答え3

1つの方法は、* nixシステムに組み込まれているquotaツールを使用することです。ここ

Soft Limityes800MBHard Limityesの場合、1000MBユーザーはEメールに到達したときにEメールを受信し、到達するSoft Limitまでユーザーはファイルを作成できます。Hard Limit

:)

関連情報