我正在使用 Ubuntu 10.04.4LTS,并且在我的计算机上安装了 Ganglia。
我曾经通过输入以下内容来获取 Gmetad 数据:
telnet localhost 8651 > /test/test.txt
或者创建一个 .sh 文件来运行它。之后我想定期获取 Gmetad 数据。我尝试 Crontab。经过一些简单的测试,我确信 Crontab 在我的 Ubuntu 中可以正常工作。但是,当我尝试通过如下设置让 crontab 获取数据时:
*/5 * * * * root sudo telnet localhost 8651 > /test/test.txt
输出文件将不完整,例如:
3263 2012-07-13 09:28 FromCrontab.txt
44833 2012-07-13 08:14 CorrectOne.txt
CorrectOne.txt 文件包含 44833 个字符,但 Crontab 的输出文件仅包含 3263 个字符。
我尝试使用以下方法来解决这个问题tee
:
sudo telnet localhost 8651 | tee -i /test/test.txt
或者更改 SHELL:
SHELL=/bin/sh or SHELL=/bin/bash
谁也帮不上忙。
我是 Ubuntu 新手,对 crontab 或 telnet 不熟悉。希望有人能帮我解决这个问题或给我一些学习的方向。
谢谢。
答案1
使用 nc:
The nc (or netcat) utility is used for just about anything under the sun
involving TCP or UDP. It can open TCP connections, send UDP packets,
listen on arbitrary TCP and UDP ports, do port scanning, and deal with
both IPv4 and IPv6. Unlike telnet(1), nc scripts nicely, and separates
error messages onto standard error instead of sending them to standard
output, as telnet(1) does with some.
要安装它,请输入sudo apt-get install netcat-openbsd
。
类似这样的东西应该可以很好地替代你的 telnet 线路(这假设你不必发送或输入任何内容来获取数据;抱歉,我不熟悉 ganglia):
nc localhost 8651 > /test/test.txt
在你的 /etc/crontab 上:
* * * * * root nc localhost 8651 > /test/test.txt
请注意,如果您以 root 身份运行此程序,则不需要 sudo。事实上,即使作为普通用户,您也应该不是需要使用 sudo 来运行 nc。出于安全原因,我建议您避免使用 root 或 sudo,除非绝对必要。