【问题标题】:Stop daemon send message/error notification to root mail停止守护进程向根邮件发送消息/错误通知
【发布时间】:2017-10-28 05:44:41
【问题描述】:

美好的一天。

在我的脚本中,有'ls'命令运行,该命令会列出某个目录下的文件内容,例如,

....
....
for i in `/usr/bin/ls 2>/dev/null /home/example/path/<file_name>`; do
---some statement----
done
----
----

但是,当上面的“ls”命令在目录中找不到任何文件时,root 将收到如下消息通知:

/bin/ls: 无法访问 /home/example/path/ : 没有这样的文件或目录

我知道这是由于该命令在执行时产生的退出代码,我知道我们可以通过在 ls 命令之后添加“|| true”命令来解决此问题,这使得退出代码始终为值“0” ,例如,

------
for i in `/usr/bin/ls 2>/dev/null /home/example/path/<file_name> || true`; 
------

或者我们可以使用代码逻辑来解决问题,例如,

if [ -r /home/example/path/<file_name> ]

但是,修复现有代码不是我的解决方案,因为此代码不属于我的团队责任。

由于我们需要解决服务器中收到根邮件通知的问题,我的服务器中是否有任何配置或设置可以更改以忽略或停止守护程序以仅向根邮件发送错误通知.

我的服务器:- AIX 6 和 7, RHEL 6 和 7

【问题讨论】:

  • 发送电子邮件的部分在哪里?它真的是守护进程还是由 crontab 条目启动的脚本?
  • @Cyrus 对不起,它不是守护进程,它是从 crontab 运行的脚本

标签: bash unix redhat ksh aix


【解决方案1】:

如何更新 crontab 条目以将所有输出(stdout/sterr)重定向到文件,例如:

05 18 * * * /here/is/my/crontab/job >> /here/is/my/crontab/job.cronlog 2>&1

我通常将我的作业定义为写入名为 job.log 的日志,而 crontab 输出发送到 job.cronlog。

显然(?)这消除了 cron 发送与相关工作相关的电子邮件的可能性。


注意:刚刚看到塞浦路斯的回应。

在我的情况下,我更喜欢将所有输出捕获到一个文件中,这样如果/当作业开始失败时,我可以查看与作业相关的任何/所有错误消息。

现在捕获,稍后清理...比尝试从 /dev/null 中提取那些错误消息更容易 :-)

【讨论】:

  • /dev/null 不需要 logrotate ;)
  • @markp 您好,感谢您的回答,我之前已经尝试过将此解决方案发送给我的客户。但是,他们不喜欢这种解决方案,因为他们不希望在他们的服务器端生成任何额外的文件或日志。 =(
  • @Azizul 然后直接到 /dev/null (正如塞浦路斯所建议的)或通过 logrotate (再次,每个塞浦路斯);在 /dev/null 的情况下,只需了解任何未来的故障排除可能需要更长的时间来执行;当“快速”解释位于 /dev/null 的某个地方时,我喜欢(不)解决生产问题
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
相关资源
最近更新 更多