【问题标题】:How to capture STDOUT from executable (cap) executed within a perl script executed from a crontab如何从 crontab 执行的 perl 脚本中执行的可执行文件(cap)中捕获 STDOUT
【发布时间】:2013-09-21 03:10:31
【问题描述】:

这是一个冗长的标题。但它解释了我的问题:

我有一个运行 perl 脚本的 crontab。

该 perl 脚本运行一个 cap 任务,它向 STDOUT 输出一些状态消息。

perl 脚本应该从 cap 中捕获 STDOUT(当前使用反引号)并对其进行解析。

现在,当我从 bash 用户运行脚本时,这可以 100% 正常工作。但是,当我从 crontab 运行脚本时,perl 脚本不会捕获 cap 任务的任何输出。

以前有没有人处理过这样的事情?谢谢。

【问题讨论】:

  • 您确定 perl 正在 crontab 中运行吗?通常它会使用与 cron 不同的环境并丢失 perl exe 或一些 perl lib 设置
  • 感谢您的回复。我实际上确信 perl 正在 crontab 中运行。我的日志文件被创建,所有相同的行都被写入......只是不是 $check_result = 'results to parse',而是打印 $check_result = ''
  • 您如何运行cap 任务?您可能会在 STDERR 中收到更多错误消息。请参阅此内容以在 cron stackoverflow.com/questions/1308484/… 中获取 STDERR
  • 反引号在 cron 作业中工作得非常好。您尚未确定一个关键因素。
  • 你能解释一下你的意思我还没有确定一个关键因素吗?

标签: perl bash shell cron capistrano


【解决方案1】:

也许您的 cap 可执行文件在没有向 stdout 发出任何消息的情况下死亡。你检查执行的成功状态了吗?

你可以试试这个吗?

$check_result = `$cmd 2>&1`;
if ($?){
  die "$cmd failed with $check_result, $!";    
}

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 2013-01-03
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多