如何从我的cronjob中保留curl输出的邮件?

时间:2010-04-23 14:35:37

标签: curl cron

我编写了一个Perl脚本,该脚本作为每日crontab作业运行,通过CURL将文件上传到Amazon S3。我希望通过电子邮件发送给我的cron作业的输出工作正常,但我不希望该电子邮件包含与CURL上载相关的消息(只有我的脚本输出的那些消息)。以下是我现在在每日电子邮件中看到的与CURL相关的消息:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0  230M    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0  230M    0     0    0  544k      0  1519k  0:02:35 --:--:--  0:02:35 1807k
  0  230M    0     0    0 1744k      0  1286k  0:03:03  0:00:01  0:03:02 1342k
  1  230M    0     0    1 2880k      0  1219k  0:03:13  0:00:02  0:03:11 1250k
  1  230M    0     0    1 4016k      0  1198k  0:03:17  0:00:03  0:03:14 1218k
  2  230M    0     0    2 5168k      0  1186k  0:03:19  0:00:04  0:03:15 1202k
  2  230M    0     0    2 6336k      0  1181k  0:03:19  0:00:05  0:03:14 1157k
  3  230M    0     0    3 7488k      0  1177k  0:03:20  0:00:06  0:03:14 1147k
  3  230M    0     0    3 8592k      0  1167k  0:03:22  0:00:07  0:03:15 1142k
  4  230M    0     0    4 9744k      0  1166k  0:03:22  0:00:08  0:03:14 1145k
  4  230M    0     0    4 10.6M      0  1163k  0:03:23  0:00:09  0:03:14 1142k
  5  230M    0     0    5 11.7M      0  1161k  0:03:23  0:00:10  0:03:13 1140k
  5  230M    0     0    5 12.8M      0  1158k  0:03:23  0:00:11  0:03:12 1133k
  6  230M    0     0    6 13.9M      0  1155k  0:03:24  0:00:12  0:03:12 1138k
  6  230M    0     0    6 15.0M      0  1155k  0:03:24  0:00:13  0:03:11 1138k
  7  230M    0     0    7 16.1M      0  1152k  0:03:25  0:00:14  0:03:11 1131k
  7  230M    0     0    7 17.2M      0  1152k  0:03:25  0:00:15  0:03:10 1132k
  7  230M    0     0    7 18.4M      0  1152k  0:03:24  0:00:16  0:03:08 1140k

我使用简单的Perl system()调用来调用CURL。有谁知道我可以提供什么命令行参数CURL来关闭上传进度的报告?

2 个答案:

答案 0 :(得分:10)

这里有一些选择。

您可以使用-s--silent标记来静音所有输出。来自curl联机帮助页:

  -s/--silent
         Silent  or  quiet  mode. Don’t show progress meter or error mes-
         sages.  Makes Curl mute.

或者,不是在Perl脚本中使用system之类的东西来运行curl,而是可以使用反引号或qx运算符将输出捕获到变量。

或者,您可以使用pipe打开curl进程以捕获其STDOUT并稍后查看。

最后,您可能希望探索使用LWP::UserAgentMechanize这样的原生Perl库替换您对curl的系统调用。

答案 1 :(得分:0)

由于某些原因,我的CURL版本没有识别-s或--silent,我知道这是没有意义的。正如@Friedo建议我尝试使用反引号或qx运算符,它也没有摆脱不需要的上传进度报告。最后,我采用了非常优雅的方式将>/dev/null 2>&1添加到系统调用的末尾,从而解决了问题。