我想为服务器B做一个夜间“hotclone”服务器A.建议服务器B在此操作期间运行最小守护进程,因此我想创建一个“最小”运行级别,它几乎只运行sshd并切换到/来自中间脚本中的运行级别,即:
# do some stuff ... # take services down telinit 2 # do backup ... # bring services back up telinit 3 # do post-backup stuff ...
我想做一个运行级别的开关,而不是显式启动/停止服务,所以我可以在许多不同配置的机器上使用相同的脚本(不同的服务,一些在systemd上的systemv-init上).我想将它全部保存在一个脚本中以保持可维护性,而不是创建一堆新的initd / systemd启动/停止脚本.
所以问题的本质是:
* telinit是否会停止脚本(假设cron在两个运行级别中)?
* telinit是否等待完成或立即返回?
*如果上述工作是“安全”的,或者是该方法的潜在问题?
*使用单个脚本是否有更好的方法(再次我宁愿避免安装一堆新的init脚本,所以这个东西基本上是“自包含的”和便携式的)
解决方法
我创建了以下脚本
#!/bin/bash date who -r /sbin/telinit 2 who -r /sbin/telinit 3 who -r date
并将其安装在cron中
* * * * * /home/iain/test &>>/tmp/test.out
这是输出
Thu Mar 20 03:06:01 EDT 2014 run-level 3 2014-03-20 03:05 last=2 run-level 2 2014-03-20 03:06 last=3 run-level 3 2014-03-20 03:06 last=2 Thu Mar 20 03:06:01 EDT 2014
如您所见,脚本一直在运行.至于安全性,您可以根据您在环境中的测试来决定.