在我的 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
文件本身内部进行配置。
如果我有 100 台服务器执行一个命令,并且每台服务器都将它们的输出重定向到 NFS 共享上的同一个文件,那么生成的文件会整齐地交错还是会损坏?
例如,如果此命令在 100 个服务器上执行:
find / type -f >> /some_server/share/file_list.txt
Run Code Online (Sandbox Code Playgroud)
会不会腐败?
附:该命令只是一个例子,我实际上并没有列出文件
我有一个带有一些功能的脚本 ( ~/func/functions.sh
),我有另一个脚本 ( ~/scripts/example.sh
)
代码:functions.sh
#!/bin/bash
function NameofFunction()
{
# do something...
echo -e "\e[31m[ ERROR ]\e[39m more text..." 1>&2
}
Run Code Online (Sandbox Code Playgroud)
代码:example.sh(运行良好)
#!/bin/bash
. ~/func/functions.sh
function functioninExample()
{
#do something...
NameofFunction ${VAR1} ${VAR2}
}
functioninExample 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
代码:example.sh(不起作用)
#!/bin/bash
. ~/func/functions.sh
function functioninExample()
{
#do something...
NameofFunction ${VAR1} ${VAR2} 2>/dev/null
}
functioninExample
Run Code Online (Sandbox Code Playgroud)
如何在不编辑函数的情况下重定向函数的回显?
NameofFunction ${VAR1} ${VAR2} 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
不起作用。
如何在不重定向 functioninExample 函数的情况下重定向函数中的 echo?