在 cron 脚本中更改运行级别是否安全?

Spl*_*iFF 5 linux init

我想每晚将服务器 A 的“热克隆”“热克隆”到服务器 B。建议服务器 B 在此操作期间运行最少的守护进程,因此我想创建一个“最小”运行级别,它几乎只运行 sshd 并切换到/从该运行级别中间脚本中的运行级别,即:

# do some stuff ...

# take services down
telinit 2

# do backup ...

# bring services back up
telinit 3

# do post-backup stuff ...
Run Code Online (Sandbox Code Playgroud)

我想做一个运行级别切换,而不是显式启动/停止服务,这样我就可以在许多不同配置的机器上使用相同的脚本(不同的服务,一些在 systemv-init 上,一些在 systemd 上)。我想将其全部保存在一个脚本中以实现可维护性,而不是创建一堆新的 initd/systemd 启动/停止脚本。

所以问题的本质是: * telinit 会停止脚本吗(假设 cron 在两个运行级别中)?* telinit 是等待完成还是立即返回?* 如果上述工作是“安全的”,或者该方法是否存在潜在问题?* 是否有更好的方法可以使用单个脚本(同样,我更愿意避免安装一堆新的 init 脚本,因此这个东西在很大程度上是“独立的”和可移植的)

use*_*517 8

我创建了以下脚本

#!/bin/bash
date
who -r
/sbin/telinit 2
who -r
/sbin/telinit 3
who -r
date
Run Code Online (Sandbox Code Playgroud)

并将其安装在 cron 中

* * * * * /home/iain/test &>>/tmp/test.out
Run Code Online (Sandbox Code Playgroud)

这是输出

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
Run Code Online (Sandbox Code Playgroud)

如您所见,脚本一直在运行。至于它的安全性,您只能根据您在环境中的测试来决定。

  • 感谢您提供“who -r”示例。我不知道那个。 (2认同)

小智 5

在较旧的 HP-UX 系统上,我们曾经使用运行级别更改每晚对数据库进行冷备份。我们在运行级别 4 启动和停止数据库,基本上做了一个 telinit 3,拍摄磁盘快照,telinit 4,开始备份磁盘。这是一种与您所看到的略有不同的策略,但对于所有意图和目的,它的行为都是相同的。