linux - 如何从 shell 脚本中触发延迟系统关闭?

标签 linux bash shell shutdown

在我的私有(private)网络上,我有一个备份服务器,每晚运行一个 bacula 备份。为了节省能源,我使用 cron 作业来唤醒服务器,但我还没有找到备份完成后如何正确关闭它的方法。 通过 bacula-director 配置,我可以在处理最后一个备份作业(即文件目录的备份)期间调用脚本。我尝试使用这个脚本:

#!/bin/bash
# shutdown server in 10 minutes
#
# ps, 17.11.2013
bash -c "nohup /sbin/shutdown -h 10" &
exit 0

脚本关闭服务器 - 但显然它只是在关闭期间返回, 结果,最后一个备份作业挂起直到关机。如何使脚本文件关闭并立即返回?

更新:经过广泛的搜索,我想出了一个(虽然很丑)解决方案: bacula 运行的脚本如下所示:

#!/bin/bash
at -f /root/scripts/shutdown_now.sh now + 10 minutes

第二个脚本 (shutdown_now.sh) 如下所示:

#!/bin/bash
shutdown -h now

实际上我发现没有明显的方法可以在“at”命令的语法中添加关机所需的参数。也许有人可以在这里给我一些建议。

最佳答案

根据备份服务器的操作系统,shutdown 的实现可能会有所不同。我在 Ubuntu 12.04 上测试了以下两个解决方案,它们都对我有用:

作为 root 用户,我创建了一个包含以下内容的 shell 脚本,并在 bash shell 中调用它:

shutdown -h 10 &
exit 0

shell 中脚本的退出代码是正确的(使用 echo $? 测试)。关闭仍在进行中(使用 shutdown -c 测试)。

第二个 shell 脚本中的 bash 函数调用同样有效:

my_shutdown() {
  shutdown -h 10
}
my_shutdown &
exit 0

关于linux - 如何从 shell 脚本中触发延迟系统关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20046908/

相关文章:

php - 在 Mac 上升级到 PHP 7

linux - subprocess.Popen : does not retun complete output , 当通过 crontab 运行时

在 shell 中重定向输入和输出的代码

linux - 如何使用shell脚本和sed删除文本文件中字符串的后缀?

c - 带有 pthread 函数的静态存储

linux - 如何创建可在 Linux 和 OSX 上运行的 .bashrc 文件

windows - 使用 Putty 从 Linux 机器上获取文件

bash - 在 Unix 上 grep 和 cut 之后在每行之前回显文本

c - 为什么我无法捕捉到 parent 发送的子进程的信号?

提供包含波形符 (~) 的路径变量时,bash diff 无法找到现有文件