我一直在使用ioping监控Linux服务器的性能(去年性能有所下降)。为此我创建了一个简单的脚本:
echo $(date) | tee -a ../sb-output.log | tee -a ../iotest.txt
./ioping -c 10 . 2>&1 | tee -a ../sb-output.log | grep "requests completed in\|ioping" | grep -v "ioping statistics" | sed "s/^/IOPing I\/O\: /" | tee -a ../iotest.txt
./ioping -RD . 2>&1 | tee -a ../sb-output.log | grep "requests completed in\|ioping" | grep -v "ioping statistics" | sed "s/^/IOPing seek rate\: /" | tee -a ../iotest.txt
etc
脚本在文件夹/home/bench/ioping-0.6中调用ioping。然后它将输出以可读的形式保存在/home/bench/iotest.txt中。它还添加了日期,以便我可以比较时间点。
不幸的是,我没有经验丰富的程序员,只有当你第一次进入正确的目录(/home/bench/ioping-0.6)时,这个版本的脚本才有效。
我想从任何地方调用此脚本。例如,通过调用
sh /home/bench/ioping.sh
谷歌搜索并阅读路径变量有点过头了。
不同版本的最终版本第3行:./ioping:没有这样的文件或目录
有关如何升级脚本以使其在任何地方都可以使用的任何想法吗?
答案 0 :(得分:0)
不是很明显吗? ioping
不在.
,因此您无法使用./ioping
。
最简单的解决方案是将PATH
设置为包含ioping
所在的目录。可能更健壮 - 找出$0
的路径,并将该路径用作ioping
的位置(确保您的脚本位于ioping
旁边)。
如果iopinf本身依赖于在某个目录中的破坏,你可能必须在运行之前使你的脚本cd到ioping目录。
答案 1 :(得分:0)
技巧是shell的$0
变量。这被设置为脚本的路径。
#!/bin/sh
set -x
cd $(dirname $0)
pwd
cd ${0%/*}
pwd
如果dirname
由于某些原因而无法使用,例如一些有限的busybox发行版,您可以尝试使用shell参数扩展技巧,例如我的示例中的第二个。