Zom*_*ies 85 linux cron ubuntu
我看到很多关于如何运行 crontab 的指南,但我现在需要的是学习如何
Ben*_*ier 81
检查您使用 cron 运行的程序是否有自己的日志文件。如果他们不将他们的输出写入标准输出,您可以将它们重定向到文件或邮寄给您。在 crontabs标准外壳重定向工作。
例如,重定向的错误输出some_job.sh到some_job.err并丢弃标准输出(即发送它/dev/null)以下的重定向添加到您的crontab
33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err
Run Code Online (Sandbox Code Playgroud)
或改为邮寄给您(如果mail有)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org
Run Code Online (Sandbox Code Playgroud)
Spi*_*iff 10
我使用过的平台上的大多数 cron 守护程序会自动将用户 cron 作业的 stdout/stderr 通过电子邮件发送给作业来自其 crontab 的用户。我忘记了系统范围内(来自 /etc/crontab 的非用户特定的 cron 作业)会发生什么。问题是人们不再总是在大多数类 Unix 操作系统上设置邮件程序守护程序(即邮件传输代理 (MTA),如 sendmail、qmail 或 postfix)。因此,如果 cron 作业输出电子邮件到达那么远,它们就会死在某个地方的本地邮件假脱机文件夹中。因此,一个答案可能只是启动您的邮件程序守护进程,并确保您有一个 ~/.forward 文件将您的本地邮件转发到您的“真实”电子邮件帐户。
如果您希望您的作业写入特定的日志文件,您可以使用@honk 建议的标准输出重定向,或者,假设您的 cron 作业是一个 shell 脚本,您可以让您的脚本调用 logger(1) 或 syslog(1) 或您的操作系统提供的用于向 syslog 发送任意消息的任何其他命令行工具。然后,您可以使用操作系统的内置方法来配置在何处记录哪些类型的消息,也许是通过编辑 /etc/syslog.conf。
我的大部分 cron 作业都会调用我专门编写的 bash 脚本,目的是为了特定原因由 cron 启动。在那些中,尤其是当我最初编写和调试它们时,我喜欢使用 bash 的“set -vx”来使 shell 脚本的每一行的未扩展和扩展形式在执行之前写入 stdout。请注意,从 cron 启动的 shell 脚本被视为非登录、非交互式 shell,因此您的标准 shell 启动脚本(如 .bashrc 和 .profile)不会运行。如果您使用 bash 并希望 bash 运行启动脚本,则必须在您的 crontab 中定义作业的行之前定义一个环境变量“BASH_ENV=/path/to/my/startup/script”。
我认为在这种情况下,在 cron 文件内重定向可能不是最佳选择。
通常您希望日志记录规范与 cron 作业脚本位于同一位置。在这种情况下,我建议如下:
#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>
Run Code Online (Sandbox Code Playgroud)
这会将 cron 作业的输出附加到 capture-log.txt 文件。
| 归档时间: |
|
| 查看次数: |
140202 次 |
| 最近记录: |