需要wget写入2个文件

时间:2017-01-06 23:37:17

标签: bash logging cron wget tee

首次使用此处。

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

  • GNU Wget 1.15构建于linux-gnu

  • 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没有传递任何东西并产生一个空文件。我收到了电子邮件,但身体里什么都没有。我以前从未使用过T恤,也不确定我是否已经掌握了它。

 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只运行命令并发送电子邮件。

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

任何帮助表示感谢。

标记

1 个答案:

答案 0 :(得分:0)

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

我做的是:

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

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

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

  4. 配置cron作业以运行脚本并通过电子邮件发送给我。

  5. 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 ; 
    

    我很遗憾不必要地推挤社区。我很高兴有机会获得这方面的帮助。我只是一个兼职的业余爱好者,我会做这些东西来学习。今天学到了一些东西肯定。

    标记