我有一个每小时运行一小时的 crontab 任务,每 10 分钟运行一些mtr
( traceroute
) 输出(在通过电子邮件发回给我之前,这将持续一个多小时),我想查看到目前为止的当前进度。
在Linux上,可以通过以下方式完成访问保存脚本结果的临时文件的 open fd。
我怎样才能在 OpenBSD 上做到这一点?
我尝试过这样做fstat | fgrep -e USER -e cron -e mtr
,但根本找不到任何临时文件。
答案1
我调查了有关 cron 如何处理邮寄其作业输出的来源:
cron(8)
设置正在运行的作业的 stdout 和 stderr 并将其直接通过管道传输到mail(1)
,不留下任何临时文件。查看do_command.c
第 411 行(1)。mail(1)
需要完全准备好它的标准输入,因为它需要标头。它打开一个临时文件(通常/tmp/mail-R…
),但立即将其删除,以免留下痕迹。查看collect.c
第 83 行(2)。
无论如何,似乎都是刻意的努力不是留下一个可拦截的临时文件。如果您需要(或想要)拦截长时间运行的 cronjob 中发生的情况,则必须自己设置一个临时文件。
此时我的建议是添加tee $HOME/cronjob.out
到您的 cronjob 中,它将在安全的地方捕获您的作业输出的副本。
答案2
您必须拦截输出(或找出临时文件在哪里)。抱歉,不知道如何在 *BSD 中执行此操作。但请考虑,除非该文件未缓冲,否则您只能在每次填满缓冲区(可能大约 4 KiB)时才能看到输出,这可能需要相当长的时间。如果想查看当前状态,只手动执行命令,成本是否太高?