gpt4 book ai didi

linux -/proc/meminfo 从 ssh 脚本读取时不更新

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:40 25 4
gpt4 key购买 nike

我在 bash 中有以下脚本:

ssh user@1.1.1.1 "echo 'start'
mkdir -p /home/user/out
cp /tmp/big_file /home/user/out
echo 'syncing flash'
sync
while [[ $(cat /proc/meminfo | grep Dirty | awk '{print $2}') -ne 0 ]] ; do
echo \"$(cat /proc/meminfo)\"
sleep 1
sync
done
echo 'done'"

我有主机 PC 和要复制到的目标 PC。在运行此脚本之前,我已经将一个大文件 scp 到目标上的/tmp 中。

当我运行此脚本时,它会复制文件/tmp/big ok,但是当它进入循环以同步闪存时,我等待 meminfo Dirty 变为零,我看到的总是Dirty: 74224 kB 在循环中重复。

但是在登录到目标的不同 ssh session 中我让它运行:

watch -n1 "cat/proc/meminfo | grep Drity"

我看到这个从 ~74000kb 倒计时到 0kB。

不同之处在于执行 watch 的 ssh session 是以 root 登录的,而 ssh 是以 user 登录的。

所以我用登录为 user 的 ssh shell 做了同样的测试,我在 Drity 中总是看到 0kb...

这是否意味着 user 无法读取与整个系统相关的 meminfo? - 我如何知道闪存何时以非根用户身份同步?

最佳答案

由于 ssh 的参数在双引号中,变量和命令替换在发送命令之前在客户端本地展开,它们不会在远程机器上完成。由于它们在客户端被替换,显然每次循环都会得到相同的结果(因为客户端没有循环)。

您应该转义 $ 字符以便将它们发送到服务器,或者将命令放在单引号内(但后者很难在命令中包含单引号)。

ssh user@1.1.1.1 "echo 'start'
mkdir -p /home/user/out
cp /tmp/big_file /home/user/out
echo 'syncing flash'
sync
while [[ \$(awk '/Dirty/ {print \$2}' /proc/meminfo) -ne 0 ]] ; do
cat /proc/meminfo
sleep 1
sync
done
echo 'done'"

在命令替换中也不需要 cat/proc/meminfogrep Dirtyawk 可以进行模式匹配并接受文件名参数。

关于linux -/proc/meminfo 从 ssh 脚本读取时不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56789004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com