繁体   English   中英

如何从Shell脚本中触发延迟的系统关闭?

[英]How can I trigger a delayed system shutdown from in a shell script?

在我的专用网络上,我有一台备份服务器,该服务器每晚运行一次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参数。 也许有人可以在这里给我一些建议。

根据备份服务器的操作系统, 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

无需创建第二个BASH脚本即可运行shutdown命令。 只需在备份脚本中替换以下行:

bash -c "nohup /sbin/shutdown -h 10" &

有了这个:

echo "/sbin/poweroff" | /usr/bin/at now + 10 min >/dev/null 2>&1

您可以随意调整时间间隔以满足您的喜好。

如果你可以成为root:要么以as登录,要么sudo -i这个工作(在ubuntu 14.04上测试):

# shutdown -h 20:00 & //在晚上8点停止机器

不需要shell脚本。 然后我可以注销,然后重新登录,过程仍然存在。 有趣的是,如果我在命令行中尝试使用sudo ,那么当我退出时,该过程就会消失!

顺便提一下,顺便提一下,在每个人都回家后我也会使用这个命令偶尔重新启动。

# shutdown -r 20:00 & //在晚上8点重新启动机器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM