LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1433|回复: 15

如何设置特定情况下的自动关机?

[复制链接]
发表于 2011-9-15 22:00:57 | 显示全部楼层 |阅读模式
当发生某个特定事件的时候,便自动关机,请问linux有这种机制吗?

举一个例子:

我的 fedora 装了一个virtual box,里边是一个windows的虚拟机,在虚拟机里,我用迅雷下载,当下载完毕的时候,迅雷可以设置将windows关闭。

请问,当windows 虚拟机自动关闭的时候,我要如何设置,才能让linux也自动关闭?
发表于 2011-9-16 16:29:03 | 显示全部楼层
如果想做到精确的某一事件触发关机行为的话,需要事件发送信号给系统,就是应用程序本身由这种机制,否则的话,我觉得只能被动的轮询(使用cron机制)或者预估一个时间,使用shutdown设置某个时间点关机(有风险,例如可能没有下载完)
其他的我也不知道,期待大牛。。
回复 支持 反对

使用道具 举报

发表于 2011-9-17 23:30:32 | 显示全部楼层
是那个迅雷提供了这样的关机选项,他也是调用windows的内核来实现关机的啊。
linux下理论上也可以实现,关键是你的条件指的是什么样的条件,linux下的软件也可以通过系统调用或者脚本来实现按条件关机。你可以说说看,你希望的是什么条件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-18 21:22:01 | 显示全部楼层
Post by xiaoshao_0_0;2152298
是那个迅雷提供了这样的关机选项,他也是调用windows的内核来实现关机的啊。
linux下理论上也可以实现,关键是你的条件指的是什么样的条件,linux下的软件也可以通过系统调用或者脚本来实现按条件关机。你可以说说看,你希望的是什么条件。


就是windows虚拟机自动关闭。不清楚virtual box会发出一个什么样的信号?该如何接收?
回复 支持 反对

使用道具 举报

发表于 2011-9-18 23:35:25 | 显示全部楼层
写个脚本  侦测 虚拟机  PID 进程是否存在  如果进程结束 则 执行 脚本

不过 楼主说的情况是 虚拟机内的 系统自动关闭 但是 虚拟机 server 并没有停止

应该从 虚拟机 使用 内存值  大小作为控制 如果PID 内存占用 小于 某值的话 就可以

shutdown -h now

说着容易 实现起来 还是有点难度的。

不过很有趣
回复 支持 反对

使用道具 举报

发表于 2011-9-19 14:15:28 | 显示全部楼层
我做过类似的,就是让yum结束后自动关机:
#!/bin/bash
SIG=yum
while [[ 1 == 1 ]]; do
  sleep 1
  CHECK=$(ps aux | fgrep $SIG | fgrep -v fgrep)
  if [[ -z $CHECK ]]; then
    echo "OK, poweroff now!"
    poweroff
  else
    echo "Still running"
  fi
done

你只要把其中的yum改成你windows虚拟机的命令行独有的特征就行了。
回复 支持 反对

使用道具 举报

发表于 2011-9-20 15:41:30 | 显示全部楼层
Post by lamda;2152398
我做过类似的,就是让yum结束后自动关机:
#!/bin/bash
SIG=yum
while [[ 1 == 1 ]]; do
  sleep 1
  CHECK=$(ps aux | fgrep $SIG | fgrep -v fgrep)
  if [[ -z $CHECK ]]; then
    echo "OK, poweroff now!"
    poweroff
  else
    echo "Still running"
  fi
done

你只要把其中的yum改成你windows虚拟机的命令行独有的特征就行了。


一秒轮询一次有时候好像会比较耗资源
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-9-20 19:47:10 | 显示全部楼层
Post by lamda;2152398
我做过类似的,就是让yum结束后自动关机:
#!/bin/bash
SIG=yum
while [[ 1 == 1 ]]; do
  sleep 1
  CHECK=$(ps aux | fgrep $SIG | fgrep -v fgrep)
  if [[ -z $CHECK ]]; then
    echo "OK, poweroff now!"
    poweroff
  else
    echo "Still running"
  fi
done

你只要把其中的yum改成你windows虚拟机的命令行独有的特征就行了。


多谢!深受启发。

就是感觉一秒一次是有点儿那啥,:-) 在考虑是否有信号的方式。
回复 支持 反对

使用道具 举报

发表于 2011-9-20 20:36:52 | 显示全部楼层
好的软件应该会给操作系统一个信号。
回复 支持 反对

使用道具 举报

发表于 2011-9-20 23:35:28 | 显示全部楼层
这个可以让windows给个信号啊,如果虚拟机关闭之前,windows给了信号关主机也行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表