在我的私有(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/