【问题标题】:How to check when perl program last ran?如何检查 perl 程序上次运行的时间?
【发布时间】:2018-05-27 15:02:07
【问题描述】:

我有一个使用 cron 每天运行 2 次的 Perl 脚本。我想知道一个命令来检查我的 Perl 程序上次运行的时间。这样的命令存在吗?如果没有,你们能告诉我我将如何完成这项任务吗?

【问题讨论】:

  • 您应该能够从 crontab 条目中解释它。 0 0,12 * * * 将在中午和午夜运行。否则,更改脚本以在运行时记录日志,或者将其包装在执行此操作的 shell 脚本中并从 cron 运行。
  • 某些系统将 cron 作业记录在 /var/log 中。查看here 了解更多信息。

标签: perl cron


【解决方案1】:

在脚本的顶部放置

open LAST, ">", "/tmp/last.time.the.program.ran";
print LAST scalar localtime;
close LAST;

现在查看程序上次运行时间的命令是

$ cat /tmp/last.time.the.program.ran

(你也可以随便看看/var/log/cron

【讨论】:

  • 不要无缘无故地使用裸字文件句柄。始终检查open 的返回值。 /tmp/last.time.the.program.ran 是一个非常糟糕的文件名。此代码对符号链接攻击开放。
【解决方案2】:

要回答您的第一个问题,不,没有一种通用的方法可以知道上次运行程序的时间。在这种情况下更复杂,因为 perl 脚本并不是真正的程序 - perl 解释器是可执行文件,而脚本是解释器的输入。所以你真的很想知道 perl 解释器最后一次运行和执行你的脚本是什么时候。

运行其他程序的某些机制(如cron)可能会保留记录程序运行时间的日志文件(可能还有它们的退出代码或其他有关执行的信息)。注意:每次运行该程序时都不会记录 - 只是在通过cron 执行时。同样,您可以将一些日志记录添加到您的脚本中,以写入它运行的文件。尽管如果脚本无法运行,或者无法写入日志文件(例如,您的权限被弄乱了),那么它就不会记录该执行。所以这不是一个万无一失的解决方案。但这对于您的目的可能就足够了。

至于cron logging,可以man cronman crontab,或者直接看一些关于cron logging的SO问题。例如, cron jobs - how to log?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多