如何确定哪个进程正在发送电子邮件?

如何确定哪个进程正在发送电子邮件?

我的电子邮件服务提供商通知我,我不断达到每日 SMTP 配额限制,并已将我的一台服务器识别为从根帐户发送电子邮件。

我已经禁用了所有发送电子邮件的 cronjobs,然后检查了我的邮件日志和系统日志,可以看到它们所指的邮件进程仍在每分钟运行。

但是,它不是从 cron 运行,并且似乎是一个独立的 SMTP 进程。

tail -f ./var/log/syslog
Jul 15 09:25:02 serveralias sSMTP[1359056]: Creating SSL connection to host
Jul 15 09:25:03 serveralias sSMTP[1359056]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Jul 15 09:25:06 serveralias sSMTP[1359056]: Sent mail for [email protected] (221 2.0.0 Bye) uid=1000 username=not-root-account outbytes=1332
Jul 15 09:26:01 serveralias sSMTP[1359129]: Creating SSL connection to host
Jul 15 09:26:03 serveralias sSMTP[1359129]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384
Jul 15 09:26:05 serveralias sSMTP[1359129]: Sent mail for [email protected] (221 2.0.0 Bye) uid=1000 username=not-root-account outbytes=1332

有没有办法可以识别这个过程并看看它在做什么?操作系统是Ubuntu Server 20.04

答案1

在这种情况下,我会围绕 sendmail 命令做一个快速而肮脏的包装,该命令通常用于从进程、crontab 等发送电子邮件:

  1. 将原来的sendmail重命名为sendmail.real:mv /usr/bin/sendmail{,.real}

  2. 将以下脚本编写为/usr/bin/sendmail

    #!/bin/sh
    calling_process=$(ps ax -o pid,cmd|grep -P "^[ ]*${PPID}"|awk '{print $2}')
    echo "${date}: Called by ${PPID} (resolves as ${calling_process})"
    /usr/bin/sendmail.real $*
    
  3. 对脚本赋予正确的权限(chmod 755/usr/bin/sendmail`)。

这一定足够了:)

相关内容