предотвращение повторных писем через bash для завышения котировок пользователя

sed n\;G <infile

... это все, что вам нужно...

For example:

seq 6 | sed n\;G

OUTPUT:

1
2

3
4

5
6

... (и пробел следует за 6 также)... или....

seq 5 | sed n\;G

OUTPUT:

1
2

3
4

5

(и ни одна пустая строка не следует за 5)

Если пустая строка всегда должна быть опущена в последней строке:

sed 'n;$!G' <infile
0
03.08.2015, 17:43
3 ответа

Вы можете использовать для этого таблицу mysql, поскольку вы уже работаете в mysql! Такой таблицы должно быть достаточно -

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

Ваша работа создателя будет создавать (или удалять) строки из этой таблицы. Ваша почтовая программа будет извлекать все строки с mailsent, установленным как 0, отправлять почту и устанавливать mailsent как 1.

Однако, если вы действительно, действительно, действительно хотите использовать текстовый файл - вот подход -

  1. Предположим, что первый вызов задания cron вашего создателя создает файл следующего вида -

    user1,user1@example.com
    user2,user2@example.com
    user3,user3@example.com
    
  2. Теперь в определенное время запускается задача mailer, которая выберет строки из этого файла, содержащие emailid, отправит их получателям и удалит email id в этих строках. (Вы можете использовать perl или sed для этого - будьте осторожны с синхронной записью этого файла от создателя) После этой операции ваш файл станет

    user1
    пользователь2
    пользователь3
    
  3. Через некоторое время создатель добавляет еще двух пользователей user4 и user5. Теперь ваш файл становится

    user1
    пользователь2
    пользователь3
    user4,user4@example.com
    user5,user5@example.com
    
  4. Когда задача mailer запустится снова, она будет отправлять письма только тем людям, у которых email id указан 0, как в шаге 2.

Существует несколько вариантов работы этой схемы.

0
28.01.2020, 02:50

Можно использовать любой из следующих двух подходов.

I) Каждый час создавайте файл /tmp/overquotausernew.txt и сравнивайте этот файл со старым файлом /tmp/overquotausernew.txt. Если во вновь созданном файле найдены новые пользователи, то отправьте письмо только этим пользователям и объедините вновь созданный файл с /tmp/overquotauser.txt

Таким образом, вы сохраните только один файл со всеми именами пользователей, которым будет отправлено письмо. А скрипт будет chk для всех новых пользователей, которым не отправляется почта.

II) Вы можете создать скрипт для отправки почты таким образом, что он будет проверять, отправляется ли почта конкретному пользователю с /tmp/overquotauser.txt или нет в течение последних 24 часов. Если почта отправлена в течение последних 24 часов, то скрипт больше ничего не будет делать, он будет отправлять почту этому пользователю.

1
28.01.2020, 02:50

Одним из способов может быть использование встроенных инструментов квоты систем *nix... начиная с здесь .

Если Soft Limit составляет 800MB и Hard Limit составляет 1000MB , то при достижении Soft Limit пользователь будет отправлен по электронной почте, что позволит ему продолжать создавать файлы до тех пор, пока не будет достигнуто Hard Limit .

:)

0
28.01.2020, 02:50

Теги

Похожие вопросы