我有一个脚本,它在一个文件中提供输出,并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