Cron Job 不会将脚本的输出作为电子邮件发送,而从 cli 运行相同的脚本则会发送电子邮件

Cron Job 不会将脚本的输出作为电子邮件发送,而从 cli 运行相同的脚本则会发送电子邮件

我有一个脚本,它在一个文件中提供输出,并awk对该输出文件执行一些操作,然后使用 paste -d 混合两个文件的输出,然后发送新创建文件的电子邮件。如果我从命令行运行相同的脚本,它也会提供输出并发送电子邮件,但如果我对 cron 作业使用相同的命令。它不会发送电子邮件并/var/log/cron显示此消息。"CROND[6235]: (root) MAIL (mailed 125 bytes of output but got status 0x0043#012)". No info for message code (0x0043#012).请提出建议。

答案1

从问题的评论部分,我看到 SELinux 阻止了您的 cron 作业发送电子邮件。从命令行手动运行不会发生拒绝,因为 SELinux 默认不限制交互式会话。另一方面,Cron 启动的作业受到限制。

我不确定您的 CentOS 7 系统中生成 SELinux 拒绝的原因。我尝试mail在完全更新的 CentOS 7 系统中从 Cron 运行命令,并且消息已成功发送。我建议您确保您的服务器安装了最新的软件包(yum upgrade)并在整个文件系统中执行 SELinux 重新标记(touch /.autorelabel && reboot)。

跟随标准 SELinux 故障排除步骤以防您的 cron 作业在重新标记后继续失败。或者,您可以永久配置宽容模式:

  • 选项 1:在cron服务上配置 SELinux 宽容模式:
# semanage permissive -a crond_t
  • 选项 2:在整个系统上配置 SELinux 宽容模式:
# sed -ri.bak 's/^(SELINUX=).*/\1permissive/' /etc/selinux/config && reboot

相关内容