アイデア/実装を改善するのに助けが必要です。シナリオは小規模ローカル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
ゼロに設定されたすべての行を抽出してメールを送信し、mailsent
1に設定します。
しかし、本物、本物、本物テキストファイルを使いたいです。一つの方法があります。
作成者のクローン操作の最初の呼び出しが次のようにファイルを生成するとします。
user1,[email protected] user2,[email protected] user3,[email protected]
メーラージョブの実行中に、このファイルからEメールIDを含む行を選択し、受信者にメールを送信し、その行からEメールIDを削除します。 (これにはPerlまたはsedを使用できます。作成者は同期的にファイルに書き込みます。)この操作の後、ファイルは次のようになります。
user1 user2 user3
しばらくすると、作成者は user4 と user5 という 2 人のユーザーを追加します。今あなたのファイルは
user1 user2 user3 user4,[email protected] user5,[email protected]
メーラージョブが再度実行されると、手順2では、EメールIDが0に指定された人にのみEメールを送信します。
このモードはいくつかの方法で動作します。
答え3
1つの方法は、* nixシステムに組み込まれているquota
ツールを使用することです。ここ。
Soft Limit
yes800MB
とHard Limit
yesの場合、1000MB
ユーザーはEメールに到達したときにEメールを受信し、到達するSoft Limit
までユーザーはファイルを作成できます。Hard Limit
:)