【发布时间】: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