【问题标题】:Need wget to write to 2 files需要 wget 写入 2 个文件
【发布时间】:2017-05-21 19:55:43
【问题描述】:

这里是第一次使用的用户。

  • Linux 峰值 4.4.36-server-2.mga5 #1 SMP Tue Dec 6 17:32:56 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

  • 基于 linux-gnu 构建的 GNU Wget 1.15

  • GNU bash,版本 4.3.48(1)-release (x86_64-mageia-linux-gnu)

我有一个使用 wget 下载文件的 cron 作业。简单的工作。我想在我的电子邮件中查看该工作的验证。我已经部分成功地让它工作了,但是电子邮件显示的是 cron 的输出而不是 wget 日志信息。这是一个例子。

cron 任务:

/usr/local/bin/update_clouds.sh ; /usr/bin/mail -s "Attempted Cloud Update" -r cron@spike root@shuttle  < /usr/share/xplanet/logs/update_clouds.txt 

由该 cron 作业初始化的 shell 脚本 (update_clouds.sh) 执行以下操作:

wget --user=<usr> --password=<passwd> -O /usr/share/xplanet/images/clouds.jpg http://xplanetclouds.com/clouds/2048/clouds_2048.jpg -a /usr/share/xplanet/logs/clouds.log

这可行,但我的电子邮件正文中包含整个 wget 日志 (/usr/share/xplanet/logs/clouds.log)。我只希望最后一笔交易出现在该电子邮件中。

最初,我认为我可以同时使用 wget 的日志记录选项 -o 和 -a。我可以附加到系统日志并覆盖电子邮件正文中我想要的文件,但这不起作用。 wget 只使用命令行中的最后一个选项,而不是两者。

我确实得到了一个解决方案,我只是随意地从 wget 的日志中提取最后 30 行并将其邮寄出去。它有效,但效率低下且丑陋。它看起来像这样:

 /usr/local/bin/update_clouds.sh ; tail -30 /usr/share/xplanet/logs/clouds.log > /usr/share/xplanet/logs/update_clouds.txt ; /usr/bin/mail -s "Attempted Cloud Update" -r cron@spike root@shuttle  < /usr/share/xplanet/logs/update_clouds.txt 

我尝试使用“tee”,但这也不起作用。好像 tee 没有传递任何内容并产生一个空文件。我收到了电子邮件,但正文中没有任何内容。我以前从未使用过 tee,也不确定我是否掌握了它。

 wget --user=mark9118 --password=xplanetmap -O /usr/share/xplanet/images/clouds.jpg http://xplanetclouds.com/clouds/2048/clouds_2048.jpg -a /usr/share/xplanet/logs/clouds.log 2>&1 |tee /usr/share/xplanet/logs/update_clouds.txt

如果您读到这里,您可能已经注意到似乎有很多方法可以给这只猫剥皮。我的偏好是让 wget 下载文件并解析出日志文件,然后通过 cron 运行命令并发送电子邮件。

如果您认为我的方法是错误的,请告诉我是否有更简单、更实用、更经济的方法,我愿意研究一下。

任何帮助表示赞赏。

标记

【问题讨论】:

    标签: bash logging cron wget tee


    【解决方案1】:

    经过几个小时的反复试验,我正在回答我自己的问题。

    我所做的是:

    1. 放弃 wget 的原生日志文件功能。这使输出达到标准输出。

    2. 将标准错误和标准输出重定向到要邮寄给我的管理员用户的文本文件中。

    3. 在同一行中,我添加了将要发送的文本文件的内容附加到 update_clouds 日志文件的命令。

    4. 将 cron 作业配置为只运行脚本并向我发送电子邮件。

    shell 脚本中的命令如下所示:

     wget --user=xxxxxx --password=xxxxxxxxxx -O /usr/share/xplanet/images/clouds.jpg http://xplanetclouds.com/clouds/2048/clouds_2048.jpg 2> /usr/share/xplanet/logs/update_clouds.txt ; cat /usr/share/xplanet/logs/update_clouds.txt >> usr/share/xplanet/logs/clouds.log
    

    cron 任务是这样的:

     /usr/local/bin/update_clouds.sh ; /usr/bin/mail -s "Updated Clouds" -r "Shuttle Cron<root@shuttle>" root@shuttle < /usr/share/xplanet/logs/update_clouds.txt ; 
    

    很抱歉不必要地打扰了社区。我很高兴有机会在这方面获得一些帮助。我只是一个兼职爱好者,我做这些东西是为了学习。今天肯定学到了一些东西。

    标记

    【讨论】:

      猜你喜欢
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多