我刚刚在 Linux 上阅读了一些关于 swappiness 的东西。我不明白为什么默认设置为 60。
根据我的说法,这个参数应该设置为 10 以减少交换。交换在我的硬盘上,所以它比我的记忆慢得多。
他们为什么要这样配置内核?
我刚刚在 Dell 1950 服务器上安装了RHEL 6.3。该服务器作为两个 GBit 端口,Gb0 和 Gb1。
出于某种晦涩的原因,udev
选择命名Gb0 eth1
和Gb1 eth0
。这对我来说绝对不是一个好发现,只会让人感到困惑。
所以我修改了配置/etc/udev/rules.d/70-persistent-net.rules
:
# PCI device 0x14e4:0x164c (bnx2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \
ATTR{address}=="00:20:19:52:d3:c0", \
ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x14e4:0x164c (bnx2)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", \
ATTR{address}=="00:20:19:52:d3:be", \
ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
Run Code Online (Sandbox Code Playgroud)
我只是更改了文件上的“NAME”字段以反映我想要的内容。我重新启动了服务器,但没有奏效。
在dmesg
日志中,我可以阅读以下内容:
udev: renamed network interface eth1 to rename5
udev: renamed network interface eth0 to eth1
udev: renamed network interface rename5 to eth0
Run Code Online (Sandbox Code Playgroud)
知道这里有什么问题吗?为什么会这样udev
切换?我有另一个类似的服务器,我没有这个问题。
我目前正在使用 rsync 将大文件从主机传输到另一个主机。我想限制这笔转账的借方。阅读手册页后,我发现选项 --bwlimit 期望 KB/s 值。
我想将传输限制在 100Mbit/s 左右,所以我使用了以下设置:
rsync --progress -v --bwlimit=10000 --temp-dir=/tmp srv:/tmp/* /tmp/
Run Code Online (Sandbox Code Playgroud)
但是根据 rsync 的输出,这似乎没有得到尊重:
file.sql.gz
570851702 100% 33.90MB/s 0:00:16 (xfer#5, to-check=34/39)
file.sql.gz
11195140 100% 7.45MB/s 0:00:01 (xfer#6, to-check=33/39)
file.sql.gz
51439169 100% 19.41MB/s 0:00:02 (xfer#7, to-check=32/39)
file.sql.gz
34022 100% 1.55MB/s 0:00:00 (xfer#8, to-check=31/39)
file.sql.gz
2305698 100% 6.96MB/s 0:00:00 (xfer#9, to-check=30/39)
file.sql.gz
2152942 100% 2.73MB/s 0:00:00 (xfer#10, to-check=29/39)
file.sql.gz
86655633 100% 19.33MB/s 0:00:04 (xfer#11, to-check=28/39)
file.sql.gz
3614476032 40% 34.82MB/s 0:02:28
Run Code Online (Sandbox Code Playgroud)
如果我没记错:19.33MB/s ~= 154Mbit/s
那么这里有什么问题呢?
PS:rsync 版本 …
我正在尝试创建一个脚本,它将启动许多后台命令。对于每个后台命令,我都需要获取返回码。
我一直在尝试以下脚本:
#!/bin/bash
set -x
pid=()
return=()
for i in 1 2
do
echo start $i
ssh mysql "/root/test$i.sh" &
pid[$i]=$!
done
for i in ${#pid[@]}
do
echo ${pid[$i]}
wait ${pid[$i]}
return[$i]=$?
if [ ${return[$i]} -ne 0 ]
then
echo mail error
fi
done
echo ${return[1]}
echo ${return[2]}
Run Code Online (Sandbox Code Playgroud)
我的问题是在等待循环期间,如果第二个 pid 在第一个之前完成,我将无法获得返回码。
我知道我可以运行wait pid1 pid2,但是使用此命令我无法获取所有命令的返回码。
任何的想法 ?
我正在尝试在我的脚本中执行以下操作:
#/bin/bash -x
var1=www
var2=www2
var3=www3
var4=www4
for i in 1 2 3 4; do
echo \$var$i
done
Run Code Online (Sandbox Code Playgroud)
显然,这不会按预期工作并导致以下输出:
$var1
$var2
$var3
$var4
Run Code Online (Sandbox Code Playgroud)
如何动态引用循环中的变量?
我正在尝试编写一个 bash 脚本,该脚本运行命令并将结果与另一个字符串进行比较。
#!/bin/bash -x
STATUS=`/root/setup_ha show --password-file=/root/password | grep ">HA State" | awk '{print $3}' | cut -c 2-`
TEST=`echo $STATUS`
if [[ "$TEST" == "ON Master" ]];
then echo CLUSTER CRITICAL
else
echo CLUSTER OK MASTER
fi
Run Code Online (Sandbox Code Playgroud)
由于原始字符串在两行上,我在新变量 TEST 中回显它。New 变量在一行中包含命令的输出。
这是 Bash 调试输出:
++ /root/setup_ha show --password-file=/root/password
++ grep '>HA State'
++ awk '{print $3}'
++ cut -c 2-
+ STATUS='ON
Master'
++ echo 'ON' Master
+ TEST='ON Master'
+ [[ ON Master == \O\N\ \M\a\s\t\e\r ]] …
Run Code Online (Sandbox Code Playgroud)