首页 > 解决方案 > 如何执行 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分钟然后关闭机器

标签: linuxbashshellterminalat-job

解决方案


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!

推荐阅读