[英]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.