如何执行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>
  1. <do_something>可能需要一些时间,并且关闭将比预期的三分钟晚。
  2. <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!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...