我们有两台服务器,其中一台运行 Ubuntu,另一台运行 Amazon Linux 2。两者都为不同的客户端运行一系列 cron 作业。
Ubuntu 服务器会发送一封电子邮件(到一个群组电子邮件地址),其中包含每个 cron 作业的输出。没有输出重定向:对于每个条目,只有一个要执行的命令:
0 2 * * * /apps/ourapp/sync_data -c variable1 -s all -i CLIENT1
...以不同的时间和不同的值重复-i
。计划的开始时间始终采用
hh :00、hh :15或 hh :45的形式。
它运行得令人满意:人们收到了电子邮件。
Amazon Linux 机器并非如此。它的邮件日志有这样的条目(略有编辑):
Feb 28 07:05:04 ip-XXXX sSMTP[32212]: Connection lost in middle of processing
Feb 28 08:05:04 ip-XXXX sSMTP[32382]: killed: timeout on stdin while reading body -- message saved to dead.letter.
Feb 28 08:05:04 ip-XXXX sSMTP[32382]: Timeout on stdin while reading body
Feb 28 21:50:04 ip-XXXX sSMTP[2261]: killed: timeout on stdin while reading body -- message saved to dead.letter.
Feb 28 21:50:04 ip-XXXX sSMTP[2261]: Timeout on stdin while reading body
Feb 28 22:05:04 ip-XXXX sSMTP[2505]: killed: timeout on stdin while reading body -- message saved to dead.letter.
Feb 28 22:05:04 ip-XXXX sSMTP[2505]: Timeout on stdin while reading body
Feb 28 22:20:05 ip-XXXX sSMTP[2845]: killed: timeout on stdin while reading body -- message saved to dead.letter.
Feb 28 22:20:05 ip-XXXX sSMTP[2845]: Timeout on stdin while reading body
您会注意到时间戳分钟组件在小时、15 分钟或 45 分钟标记后 5 分钟。这些对应于不发送电子邮件的 cron 作业。
dead.letter
始终为空,如果在作业结束之前没有发送日志(正如我推断的那样),这是有道理的。
我读到的内容sSMTP
表明您无法stdin
使用配置选项覆盖超时(尽管该信息可能已过时)。
那么我能做什么呢?这是因为我们使用sSMTP
而不是其他一些邮件机制吗?
如果您坚持使用 sSMTP,您将无能为力。正如您所猜测的,这是不可配置的。5 分钟超时是硬连线到程序代码中的。如果您的工作需要超过 5 分钟,那么您只需要一个不同的邮件提交系统。