我想每晚做一个服务器A的“热克隆”到服务器B.build议服务器B在这个动作期间运行最小的守护进程,所以我想创build一个“最小”的运行级别,几乎只运行sshd并切换到/从那中级脚本运行级别,即:
# do some stuff ... # take services down telinit 2 # do backup ... # bring services back up telinit 3 # do post-backup stuff ...
我想做一个运行级别的开关,而不是明确地启动/停止服务,这样我就可以在许多不同的configuration的机器上使用相同的脚本(不同的服务,一些在systemv上的systemv-init上)。 我想保持它在一个脚本的可维护性,而不是创build一堆新的initd / systemd启动/停止脚本。
所以问题的本质是:* telinit会停止脚本(假设cron在运行级别)? * telinit是否等待完成或立即返回? *如果上述工作是“安全”的,或者是这种方法的潜在问题? *是否有一个更好的方法可以使用一个单一的脚本(同样我宁愿避免安装一堆新的init脚本,所以这个东西在很大程度上是“独立的”和便携的)
我创build了以下脚本
#!/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
正如你所看到的脚本一直在运行。 至于这个安全性,只有你可以根据你的testing环境来决定。
在较早的HP-UX系统上,我们使用运行级别更改每晚对数据库进行冷备份。 我们有数据库启动和停止在运行级别4,基本上做了一个telinit 3,采取了磁盘快照,telinit 4,开始备份磁盘。 这是一个略微不同的策略,但是对于所有的意图和目的,它的行为都是一样的。