需要确定linux/OSX何时完全初始化

需要确定linux/OSX何时完全初始化,linux,shell,osx-lion,Linux,Shell,Osx Lion,我需要一种shell脚本方法来确定远程linux/OSX何时完成了所有/etc/init.d/*的运行级别 因为我知道我可以在网络启动时将ssh连接到虚拟机中,并运行像/bin/true或/bin/ps这样的命令,而不是所有东西都处于它需要的状态 基本上我需要 while [ ${INIT_STILL_RUNNING_ON_REMOTE_SYSTEN} ] do sleep 30 done ssh remoteUser@remoteSystem:command 您可以将一个脚本置于感兴

我需要一种shell脚本方法来确定远程linux/OSX何时完成了所有/etc/init.d/*的运行级别

因为我知道我可以在网络启动时将ssh连接到虚拟机中,并运行像/bin/true或/bin/ps这样的命令,而不是所有东西都处于它需要的状态

基本上我需要

while [ ${INIT_STILL_RUNNING_ON_REMOTE_SYSTEN}  ]
do
   sleep 30
done
ssh remoteUser@remoteSystem:command

您可以将一个脚本置于感兴趣的运行级别,这是最后要运行的,也是第一个要关闭的,它会在某个地方触及一个文件以指示它已运行

例如,如果您制作了一个名为
S99finished
的脚本,并将其放在运行级别文件夹中,它将在该运行级别最后运行。关闭时,将首先运行相应的
K00finished

S99finished
可能看起来像:

#!/bin/bash
touch ~/.init_finished
#!/bin/bash
if [ -e ~/.init_finished ]; then
   rm ~/.init_finished
fi
K00finished
可能看起来像:

#!/bin/bash
touch ~/.init_finished
#!/bin/bash
if [ -e ~/.init_finished ]; then
   rm ~/.init_finished
fi
然后,您的启动脚本将进行轮询,直到
~/.init\u完成
,在该点上它将继续它的快乐方式


注意,启动脚本以root用户的身份运行,因此使用主目录tilde将其放在root用户的主目录中。这可能不适合你正在做的事情,但说明了这一点。将它放在
/var/log
或其他常见的轮询位置同样容易。只要记住,无论你在哪里粘贴它,它都必须对每个人都具有读取权限

您可以将一个脚本置于感兴趣的运行级别,这是最后运行的脚本,也是第一个关闭的脚本,它会触及某个文件的某个位置,以指示该文件已运行

例如,如果您制作了一个名为
S99finished
的脚本,并将其放在运行级别文件夹中,它将在该运行级别最后运行。关闭时,将首先运行相应的
K00finished

S99finished
可能看起来像:

#!/bin/bash
touch ~/.init_finished
#!/bin/bash
if [ -e ~/.init_finished ]; then
   rm ~/.init_finished
fi
K00finished
可能看起来像:

#!/bin/bash
touch ~/.init_finished
#!/bin/bash
if [ -e ~/.init_finished ]; then
   rm ~/.init_finished
fi
然后,您的启动脚本将进行轮询,直到
~/.init\u完成
,在该点上它将继续它的快乐方式


注意,启动脚本以root用户的身份运行,因此使用主目录tilde将其放在root用户的主目录中。这可能不适合你正在做的事情,但说明了这一点。将它放在
/var/log
或其他常见的轮询位置同样容易。只要记住,无论你在哪里粘贴它,它都必须对每个人都具有读取权限

为什么你认为这很有用?我有一些非常讨厌的开发工具,在我的mac上的virutal linux机器上运行。在启动IDE之前,必须在VM上启动并运行某些进程。之后,我就可以启动IDE了。我每天都要坐在我的桌面上,点击相同的按钮和窗口,这样我就可以设置一些脚本来启动一切了。去喝我的咖啡听起来你只需要知道这些进程何时运行,问题就解决了。我需要知道这些进程都已完成,不会启动新进程。由于它们在理论上是以优先级为基础的,因此在运行一个优先级和另一个优先级之间存在一个很小的机会窗口,在这个窗口中没有要运行的/etc/init.d进程,但系统还没有完全启动。我有一个想法。从一个运行级别更改为另一个运行级别时,“ps aux | grep initd”显示了什么。当initd完成了运行级别的更改后,它会显示“initd[RUNLEVEL]”为什么您认为这很有用?我有一些在mac上的virutal linux机器上运行的非常烦人的开发工具。在启动IDE之前,必须在VM上启动并运行某些进程。之后,我就可以启动IDE了。我每天都要坐在我的桌面上,点击相同的按钮和窗口,这样我就可以设置一些脚本来启动一切了。去喝我的咖啡听起来你只需要知道这些进程何时运行,问题就解决了。我需要知道这些进程都已完成,不会启动新进程。由于它们在理论上是以优先级为基础的,因此在运行一个优先级和另一个优先级之间存在一个很小的机会窗口,在这个窗口中没有要运行的/etc/init.d进程,但系统还没有完全启动。我有一个想法。从一个运行级别更改为另一个运行级别时,“ps aux | grep initd”显示了什么。当initd完成运行级别更改时,它会显示“initd[RUNLEVEL]”。我想你的意思是K00finished。你是对的,愚蠢的打字错误。谢谢。我想你是说K00finished。你说得对,愚蠢的打字错误。谢谢