更改cron脚本中的runlevel是否安全?

我想每晚做一个服务器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,开始备份磁盘。 这是一个略微不同的策略,但是对于所有的意图和目的,它的行为都是一样的。