我想在特定时间(使用 at 命令)运行 bash 3 分钟后,我想关闭机器
这是我的 bash 代码(send.sh):
$ x=10
echo The value of variable x = $x
这是我的
at
命令:
at 2:30 PM tomorrow
我应该写什么send.sh
运行3分钟然后关闭机器
该timeout
命令可能是您正在寻找的。它会在指定的时间后向运行命令
发送信号。TERM
此外,您可以指定它将发送一个附加 KILL
信号,以防命令不愿对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!
我不明白您为什么要在脚本中执行“等待”部分:您可以使用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
这可能是您正在寻找的解决方案。