首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >/proc/meminfo在从ssh脚本读取时没有更新

/proc/meminfo在从ssh脚本读取时没有更新
EN

Stack Overflow用户
提问于 2019-06-27 10:26:12
回答 1查看 185关注 0票数 0

我在bash中有以下脚本:

代码语言:javascript
复制
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,我正在复制到。在运行这个脚本之前,我已经将一个大文件放到了目标上的/tmp中。

当我运行这个脚本时,它会复制文件/tmp/big,但是当它进入循环同步闪存,然后等待meminfo Dirty达到零时,我看到的总是循环中重复的Dirty: 74224 kB

但是,在不同的ssh会话中,我让它运行:

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

我看到这个数字从74000 0kB下降到0kb。

不同之处在于,执行watch的ssh会话以根用户身份登录,ssh登录在user中。

因此,我对登录的ssh shell进行了与user相同的测试,并且始终在Drity中看到了0kb .

这是否意味着user无法读取与整个系统相关的内存信息?-我如何知道闪存何时作为非根用户进行同步?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 10:44:58

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

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

代码语言:javascript
复制
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可以进行模式匹配并接受文件名参数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56789004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档