如何检查使用“at”命令提交的批处理作业的运行时日志?

如何检查使用“at”命令提交的批处理作业的运行时日志?

我在 Ubuntu 20 中提交批处理作业。

at now -f myscript.sh

作业完成后,我会收到一封包含日志的电子邮件。但对于一项耗时的工作,我希望看到执行过程中的进展。我怎样才能做到这一点?

答案1

这将非常冗长,但是如果您将 -x 添加到 myscript.sh 第一行的 shell 中,它将显示脚本的逐行执行。输出将通过电子邮件发送给提交作业的用户,并且也会出现在 cron 日志中。

例如,#!/bin/sh -x 而不是 #!/bin/sh

当作业正在进行时,只需 tail -f cron 日志即可查看进度。提醒一下,这会产生大量的日志数据!您可能会选择修改脚本以某种方式显示进度? echo“拆解完成,开始安装xxx”

答案2

at工具捕获进程的标准输出,然后将其作为日志发送。因此,如果不对日志进行重大更改,at就不可能在写入日志时读取该日志。

但您可以使用第二个日志来解决此问题。只需将“进度”日志打印到具有已知名称的文件中即可。之后,您可以tail -f根据需要或忽略它。

换句话说,您运行的脚本at将类似于:

#!/bin/sh
echo Started at `date` 
echo Started at `date` > /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc
echo Completed at `date` with return code $rc >> /var/myscript.log

在这种情况下,您将有一个简短的日志(只有两行)用于at邮寄给您,以及来自长时间运行的内部部分的所有日志。

作为此方法的扩展,您可以使用tee.它允许将标准输出复制到文件中。这反过来又可以帮助在脚本中重复打印日志消息。

#!/bin/sh
echo Started at `date` | tee /var/myscript.log
some_long_running_process_with_log >> /var/myscript.log
rc=$?
echo Completed at `date` with return code $rc | tee -a /var/myscript.log

相关内容