这里是Linux新手,所以请耐心听我说。
我正在为学校(在CentOS 8虚拟机上)编写一个Bash脚本,并且我正在尝试将Siege (Load Tester)的输出保存到一个变量中,这样我就可以比较这些值。
这就是我遇到的问题:“服务器现在被围困”和“解除服务器围困……”之间的HTTP线路。是存储在变量中的内容,而不是“解除对服务器的围攻...”之后的漂亮的小摘要。
[root@prodserver siege-4.1.1]# siege -c 1 -t 1s 192.168.1.3
** SIEGE 4.1.1
** Preparing 1 concurrent users for battle.
The server is now under siege...
HTTP/1.1 200 0.00 secs: 6707 bytes ==> GET /
HTTP/1.1 200 0.01 secs: 2008 bytes ==> GET /assets/images/taste_bug.gif
HTTP/1.1 200 0.00 secs: 2579 bytes ==> GET /assets/images/backpack_bug.gif
HTTP/1.1 200 0.00 secs: 2279 bytes ==> GET /assets/images/desert_bug.gif
HTTP/1.1 200 0.00 secs: 1653 bytes ==> GET /assets/images/calm_bug.gif
HTTP/1.1 200 0.00 secs: 1251 bytes ==> GET /assets/javascripts/menus.js
...Shortened for readability...
HTTP/1.1 200 0.00 secs: 1251 bytes ==> GET /assets/javascripts/menus.js
HTTP/1.1 200 0.00 secs: 2579 bytes ==> GET /assets/images/backpack_bug.gif
HTTP/1.1 200 0.00 secs: 2279 bytes ==> GET /assets/images/desert_bug.gif
HTTP/1.1 200 0.00 secs: 1653 bytes ==> GET /assets/images/calm_bug.gif
HTTP/1.1 200 0.00 secs: 1251 bytes ==> GET /assets/javascripts/menus.js
HTTP/1.1 200 0.01 secs: 2008 bytes ==> GET /assets/images/taste_bug.gif
HTTP/1.1 200 0.00 secs: 2579 bytes ==> GET /assets/images/backpack_bug.gif
HTTP/1.1 200 0.00 secs: 2279 bytes ==> GET /assets/images/desert_bug.gif
HTTP/1.1 200 0.00 secs: 1653 bytes ==> GET /assets/images/calm_bug.gif
Lifting the server siege...
Transactions: 149 hits
Availability: 100.00 %
Elapsed time: 0.22 secs
Data transferred: 3.95 MB
Response time: 0.00 secs
Transaction rate: 677.27 trans/sec
Throughput: 17.97 MB/sec
Concurrency: 1.00
Successful transactions: 149
Failed transactions: 0
Longest transaction: 0.01
Shortest transaction: 0.00目前,我正在尝试将变量存储在bash中:
SIEGE="$(siege -c $1 -t $2 [ip])"如前所述,当我回显$SIEGE时,它发现变量存储了所有HTTP行,而不是“解除封锁...”之后的摘要。
我的问题是如何将该摘要存储在变量中。
发布于 2021-09-25 22:50:24
备注:我不熟悉siege,所以我不知道是否所有的输出都会发送到stdout,或者是否会有一些输出发送到stderr。
假设所有siege输出都将发送到stdout ...根据需要忽略哪些行,有几个想法:
# grab lines from `^Lifting` to end of output:
SIEGE="$(siege -c $1 -t $2 [ip] | sed -n '/^Lifting/,$ p')"
# ignore all lines starting with `^HTTP`
SIEGE="$(siege -c $1 -t $2 [ip] | grep -v '^HTTP')"如果结果是将一些输出发送到stderr,请更改siege调用以将stderr重定向到stdout
# from
siege -c $1 -t $2 [ip]
# to
siege -c $1 -t $2 [ip] 2>&1虽然我可能会选择将所有输出保存到一个文件中,然后根据需要解析该文件,但ymmv ...
https://stackoverflow.com/questions/69329823
复制相似问题