我想做一个服务器 A 到服务器 B 的夜间“热克隆”。建议服务器 B 在此操作期间运行最少的守护进程,因此我想创建一个几乎只运行 sshd 并切换到/从该运行级别的“最小”运行级别脚本中间的运行级别,即:
# do some stuff ...
# take services down
telinit 2
# do backup ...
# bring services back up
telinit 3
# do post-backup stuff ...
我想做一个运行级别切换而不是显式启动/停止服务,这样我就可以在许多不同配置的机器上使用相同的脚本(不同的服务,一些在 systemv-init 上,一些在 systemd 上)。为了可维护性,我想将它们全部保存在一个脚本中,而不是创建一堆新的 initd/systemd 启动/停止脚本。
所以问题的本质是: * telinit 会停止脚本(假设 cron 在两个运行级别中)?* telinit 是等待完成还是立即返回?* 如果上述工作是否“安全”,或者该方法是否存在潜在问题?* 有没有更好的方法可以使用单个脚本(同样我宁愿避免安装一堆新的初始化脚本,所以这个东西在很大程度上是“独立的”和可移植的)
我创建了以下脚本
并将其安装在 cron
是输出
如您所见,脚本继续运行。至于安全性,只有您可以根据您在环境中的测试来决定。
在较旧的 HP-UX 系统上,我们过去常常使用运行级别更改每晚对数据库进行冷备份。我们让数据库在运行级别 4 启动和停止,基本上做了 telinit 3,拍摄磁盘快照,telinit 4,开始备份磁盘。这是一个与您看到的策略略有不同的策略,但出于所有意图和目的,它的行为都是相同的。