rub*_*o77 83 cron io-redirection email
在我的 Ubuntu-Desktop 和我的 debian-server 上,我有一个需要每分钟执行一次的脚本(一个调用我的空间在线浏览器游戏的分钟的脚本)。
问题是 debian 派生 cron 在/var/log/syslog每次执行时都会记录。我最终看到重复执行的消息/var/log/syslog:
Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1)
Run Code Online (Sandbox Code Playgroud)
我知道为了抑制程序的输出,我可以将它重定向到/dev/null,例如隐藏程序中的所有错误和警告消息,我可以像这样在 crontab 中创建一行
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null
Run Code Online (Sandbox Code Playgroud)
但我想运行一个 cronjob 并确保所有生成的输出或错误都通过管道传递到 NULL,因此它不会在系统日志中生成任何消息,也不会生成任何电子邮件
编辑:
有一个解决方案可以通过更改将 cron-logs 重定向到一个单独的日志,就像这里提出的那样/etc/syslog.conf
但缺点是,所有 cronjobs 的所有输出都被重定向。
我可以以某种方式只将单个 cronjob 重定向到单独的日志文件吗?最好在cron.hourly文件本身内部进行配置。
slm*_*slm 141
使这一行:
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
这将同时捕获 STDOUT (1) 和 STDERR (2) 并将它们发送到/dev/null.
您还可以通过设置然后重新设置来禁用电子邮件,MAILTO=""这将禁用任何电子邮件的发送。
MAILTO=""
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null 2>&1
MAILTO="admin@somedom.com"
* * * * * root /usr/local/sbin/myothercommand.sh
Run Code Online (Sandbox Code Playgroud)
通常,您会在 中收到以下类型的消息/var/log/syslog:
Nov 11 08:17:01 manny CRON[28381]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Run Code Online (Sandbox Code Playgroud)
这些只是通过 cron 执行的 cronjobs 目录的通知。此消息与这些作业没有直接关系,而是crond直接来自守护程序。对于这些,您真的无能为力,我鼓励您不要禁用这些,因为它们可能是您crond通过日志了解正在发生的事情的唯一窗口。
如果他们很讨厌你,你总是可以引导他们到其他日志文件,以帮助他们走出你的/var/log/syslog文件,通过/etc/syslog.conf对配置文件syslog。
gol*_*cks 11
有一个需要每分钟执行一次的脚本。问题是 cron 每次执行时都会记录到 /var/log/syslog 中。我最终看到它在 /var/log/syslog 中一遍又一遍地重复出现的消息
既然你什么都不做似乎停止这一点,值得一问:什么恰好是这个剧本,什么究竟是你在系统日志看到消息?
如果 slm 的建议不起作用,这是因为某些内容直接记录到 syslog - 要么是 cron,正如您的某些评论中所暗示的那样,要么是由 cron 运行的进程。 发送到 syslog 的消息不是来自 stdin 或 stderr,因此2>&1&>无济于事。
可能有一种方法可以配置相关应用程序的行为,但我们不知道它是什么。
当然有一种方法可以配置大多数当代系统日志实现(有几个)来非常具体地过滤消息。例如,如果日志消息中使用了唯一标记,您可以将其作为目标。但同样,由于我们对特定消息或您使用的 syslogd 一无所知,因此没有什么可以推荐的具体内容。
我的一般观点是,如果您不想重定向/过滤消息,因为“这将重定向所有消息”,那么您可以改进过滤技术。 您链接到的服务器故障线程仅提到按设施 ( *.cron) 进行过滤——但您可以配置比这更专业的过滤器。
Debian 和 Ubuntu 都有rsyslog可用。在 debian 5+ 上它是默认的 syslog,在 ubuntu 上它是一个选项,所以你必须安装它。要创建一个过滤器,目标某种特定的内容,把这个靠近顶部的(即之前的任何其他规则,但一般的配置,模块加载等后)/etc/rsyslog.conf。最好的方法不是编辑它rsyslog.conf本身,而是在/etc/rsyslog.conf.d/目录中创建一个文件,名称以两位小于 50 的数字开头,即/etc/rsyslog.conf.d/15-my-filter.conf. 你可以把这样的东西放在那里:
:msg, contains, "/usr/bin/w3m -no-cookie" /dev/null
Run Code Online (Sandbox Code Playgroud)
这会将消息发送到/dev/null(或单独的日志,如果您愿意)。但是,消息仍将通过将其发送到 的后续规则传递/var/log/syslog。为了防止这种情况:
& stop
Run Code Online (Sandbox Code Playgroud)
紧接着另一行之后。这会丢弃任何与前面规则匹配的内容。或者,对于单行规则,您可以添加stop到该规则行的末尾。
rsyslogd更改配置后必须重新启动(例如在 systemd 系统上systemctl restart rsyslog):
kill -HUP $(cat /var/run/rsyslogd.pid)
Run Code Online (Sandbox Code Playgroud)
HUP 使守护程序自行重新启动。
小智 5
改变 /etc/default/cron
# Or, to log standard messages, plus jobs with exit status != 0:
# EXTRA_OPTS='-L 5'
#
# For quick reference, the currently available log levels are:
# 0 no logging (errors are logged regardless)
# 1 log start of jobs
# 2 log end of jobs
# 4 log jobs with exit status != 0
# 8 log the process identifier of child process (in all logs)
#
EXTRA_OPTS="-L 0"
Run Code Online (Sandbox Code Playgroud)
默认情况下,该EXTRA_OPTS行是""
| 归档时间: |
|
| 查看次数: |
225746 次 |
| 最近记录: |