如何解决如何执行bash 3分钟然后关闭机器
我想在特定时间(使用at命令)运行bash 3分钟,然后我要关闭机器
这是我的bash代码(send.sh):
$ x=10
echo The value of variable x = $x
这是我的
at
命令:
at 2:30 PM tomorrow
在运行send.sh
3分钟后关闭机器时,我应该写些什么
解决方法
我不明白您为什么要在脚本中执行“等待”部分:您可以使用at
(伪代码)简单地执行以下操作:
at 2:30 PM tomorrow,launch "send.sh"
at 2:33 PM tomorrow,shut down your machine
问题在于,如果将其放在“ send.sh”中的某处,则可能会发生以下情况:
send.sh内容:
<do something>
<wait for three minutes>
<shut down your machine>
-
<do_something>
可能需要一些时间,并且关闭将比预期的三分钟晚。 -
<do_something>
可能会出错,导致脚本中止并且计算机完全不会关闭。
因此,我建议创建两个单独的at
条目。
在Socowi发表评论后编辑:
显然,可以在命令后添加at
子句,如下所示:
echo shutdown | at now + 3 minutes
这可能是您正在寻找的解决方案。
,您可能正在寻找timeout
命令。
在指定的时间后,它将向运行的命令发送TERM
信号。另外,您可以指定在命令不愿意对KILL
信号做出反应的情况下,它将发送 additional TERM
信号。
这是一个sceleton脚本,您可以根据自己的需要进行修改:
#!/bin/bash
{ sleep 180; echo shutdown; } &
timeout --verbose --kill-after 1 180 \
bash -c "trap 'echo TERM received,exiting gracefully!; exit' SIGTERM; while true; do sleep 1; echo Sending stuff...; done"
while循环的全部目的是模拟可能持续3分钟以上的操作。我添加了一个信号陷阱,该信号陷阱在发送TERM
信号后就会触发,以使脚本有机会在时间到时优雅退出。测试脚本并对结果满意后,请删除echo
前面的shutdown
。
这是运行中的脚本:
~/$ ./send.sh
Sending stuff...
Sending stuff...
(truncated)
Sending stuff...
timeout: sending signal TERM to command ‘bash’
shutdown
Terminated
TERM received,exiting gracefully!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。