【问题标题】:Find out who/what is calling a script (cron)找出谁/什么在调用脚本(cron)
【发布时间】:2011-06-06 10:37:16
【问题描述】:

我最近遇到了一个问题,有人的 cron 作业正在调用一个脚本,该脚本在运行时向我发送了警报。我想知道它是谁的工作以及它在哪台服务器上运行。

问题已由其他人解决,但我想知道我可以做些什么来找出运行作业的主机/用户名。我能想到的一件事是编辑脚本 (Perl) 并使用 Sys::Hostname。还有什么?

谢谢!

【问题讨论】:

  • 你有邮箱,检查邮件头
  • @ajreal,他没有说警报是通过电子邮件发送的。
  • 我的错,我的意思是如果警报是通过电子邮件发送的

标签: linux perl shell unix cron


【解决方案1】:

如您所说,您可以使用Sys::Hostname 获取主机名。也可以通过getpwuid($<)获取用户名:

use Sys::Hostname;

my $info = getpwuid($<) . '@' . hostname;

print "$info\n"; # prints user@host

【讨论】:

    【解决方案2】:

    除非您使用邮件发送警报,否则没有自动方法可以做到这一点。邮件在标题中包含主机名,因此您至少可以看到它来自哪里(用户和主机)。然后时间戳应该有助于定位 cron 作业。

    对于所有其他形式的警报(SMS、寻呼机等),您应该制定政策,在消息中包含用户和主机名。

    【讨论】:

      【解决方案3】:

      您还可以在脚本中添加:print `env|sort`;——这将显示 USERNAME 或 LOGNAME。如果您不想弄乱程序的输出,请将其记录到文件中:

      use POSIX 'strftime';
      open my $log, '>>', 'logfile' or die "can't append to logfile: $!\n";
      print $log strftime(%Y-%m-%d %T", localtime), " - starting $0\n";
      print $log `env|sort`;
      close $log;
      

      【讨论】:

        猜你喜欢
        • 2018-03-25
        • 2014-06-21
        • 2012-04-24
        • 2011-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多