我想知道如何在每次执行时准确地看到cron作业正在做什么。日志文件位于哪里?或者我可以把输出发送到我的邮箱吗?我已经设置了电子邮件地址,当cron作业运行时发送日志,但我还没有收到任何东西。
当前回答
Cron已经通过邮件将它运行的每个作业的标准输出和标准错误发送给Cron作业的所有者。
您可以在crontab文件中使用MAILTO=收件人将电子邮件发送到不同的帐户。
要使其工作,您需要使邮件正常工作。发送到本地邮箱通常不是问题(事实上,ls -l "$MAIL"很可能会显示你已经收到了一些),但要将它从盒子里拿出来放到互联网上,需要正确配置MTA (Postfix, Sendmail,等等)来连接到世界上。
如果没有输出,则不会生成电子邮件。
一种常见的安排是将输出重定向到一个文件,在这种情况下,cron守护进程当然不会看到作业返回任何输出。一种变体是将标准输出重定向到一个文件(或者编写脚本,这样它就永远不会打印任何东西——也许它将结果存储在数据库中,或者执行维护任务,但根本不输出任何东西?),并且只在出现错误消息时接收电子邮件。
要重定向两个输出流,语法为
42 17 * * * script >>stdout.log 2>>stderr.log
请注意我们如何使用append (double >>)而不是override,这样任何前一个作业的输出都不会被下一个作业的输出所取代。
正如这里的许多回答所建议的,您可以将两个输出流发送到单个文件;用2>&1替换第二个重定向,表示“标准错误应该与标准输出的方向一致”。(但我并不特别支持这种做法。如果你对标准输出没有什么期望,但可能忽略了一些东西,可能来自脚本调用的外部工具,那么这主要是有意义的。)
Cron作业在您的主目录中运行,因此任何相对文件名都应该相对于主目录。如果想要在主目录之外写,显然需要单独确保对目标文件有写访问权。
常见的反模式是将所有内容重定向到/dev/null(然后让Stack Overflow帮助您找出哪里出了问题;但是我们也看不到丢失的输出!)
在脚本中,确保将常规输出(实际结果,最好是机器可读的形式)和诊断(通常是为人类读者设置的格式)分开。在shell脚本中,
echo "$results" # regular results go to stdout
echo "$0: something went wrong" >&2
一些平台(例如GNU Awk)允许你使用文件名称/dev/stderr作为错误消息,但这是不合适的可移植性;在Perl中,警告和打印标准错误;在Python中,写入sys。Stderr,或者使用日志记录;在Ruby中,尝试$stderr.puts。还要注意错误消息如何包含产生诊断消息的脚本名称。
其他回答
如果你用sudo运行一些命令,它将不允许。须藤需要洗漱。
* * * * * myjob.sh >> /var/log/myjob.log 2>&1
是否将cron作业的所有输出记录到/var/log/myjob.log
你可以用mail发送电子邮件。大多数系统将通过电子邮件将未处理的cron作业输出发送给root或相应的用户。
使用命令crontab -e,然后将cron作业编辑为
* * * * * /path/file.sh > /pathToKeepLogs/logFileName.log 2>&1
这里,2>&1表示标准错误(2>)被重定向到由标准输出(&1)指向的相同文件描述符。
如果你仍然想检查你的cron作业,你应该提供一个有效的 在cPanel中设置Cron作业时使用电子邮件帐户。
当您指定一个有效的电子邮件时,您将收到所执行的cron作业的输出。因此,您将能够检查它,并确保一切都已正确执行。注意,如果cron作业命令没有输出,您将不会收到电子邮件。
请记住,每个执行的cron作业都会收到一封电子邮件。这可能会淹没你的收件箱,以防你的crons运行太频繁
默认cron日志到/var/log/syslog,这样你就可以看到cron相关的条目:
grep CRON /var/log/syslog
https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
推荐文章
- 为什么logcat没有显示任何东西在我的Android?
- 在Python中记录未捕获的异常
- 重定向复制的标准输出到日志文件从bash脚本本身
- Python日志:使用时间格式的毫秒
- IE8的console.log怎么了?
- 如何从Kubernetes复制控制器的所有pod中获取日志?
- Spring RestTemplate -如何启用请求/响应的完整调试/日志记录?
- 每周测试一次cron作业
- Crontab每周的日期语法
- 子进程命令的实时输出
- 我怎么能让cron作业每30分钟运行一次?
- 如何写一个文件,使用日志Python模块?
- 如何模拟环境cron执行脚本?
- “静态最终日志记录器”应该用大写声明吗?
- 日志级别—重新登录—分配日志级别的经验法则