如何在命令行中休眠/暂停,并在特定时间执行此操作?

我通过阅读如何在命令行中挂起/休眠系统?,找到了如何使用命令行挂起/休眠系统的方法。
不过,我想知道如何在特定时间(例如晚上11点)或相对时间(例如30分钟后)使用命令行来挂起/休眠系统。
我已经知道如何使用关机命令来实现这一点,但不确定是否类似。
3个回答

你可以使用at命令来安排任何操作,包括运行那个问题中详细说明的命令。
例如,如果你想在30分钟后休眠: echo 'pmi action hibernate' | at now + 30 min 或者如果你想在晚上11点暂停: echo 'pmi action suspend' | at 11pm 如果您需要以root身份运行命令,请使用sudo运行at,而不是直接使用sudo运行命令本身(因为sudo只应在交互式环境下运行,除非您已配置不要求输入密码)。例如,使用pm-hibernate和pm-suspend的等效命令如下:
echo pm-hibernate | sudo at now + 30 min
echo pm-suspend | sudo at 11pm

谢谢你注意到两种情况都被要求了...我已经修改了标题以反映这一点。我现在修改了我的答案,包括了这两种情况。 - cprofitt
有没有想法如何清理这些任务? - KhoPhi
2@Rexford atrm命令用于删除由at创建的作业。 - Eliah Kagan

对于相对规范(例如“30分钟后”),您可以简单地使用sleep命令来使挂起/休眠命令等待。

示例:

等待30分钟,然后暂停:

sudo sleep 30m; sudo pm-suspend

等待1小时,然后进入休眠状态。
sudo sleep 1h; sudo pm-hibernate

我也喜欢这种方法。 - KhoPhi
6下午1点后,“pm-hibernate”会再次要求root密码,而挂起操作则无法进行。 - Vitaly Zdanevich
1要不要以root身份登录,这样就不会被要求输入密码了? - user639188
或者尝试类似这样的命令:sudo "sleep 1h; pm-hibernate",这样就不需要再次调用sudo了。 - ChristophK

每天特定时间重复的任务,比如每天定时关闭计算机,可以使用cron。
crontab -e

添加以下内容:
15 14 1 * * pmi action suspend

如果你想自定义它。
* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

对于一次性的任务,请使用at命令

例如,如果您想要在30分钟后休眠:

echo 'pmi action hibernate' | at now + 30 min

如果你想在晚上11点暂停,请这样做:
echo 'pmi action suspend' | at 11pm

2使用cron是一个很好的解决方案,当目标是在特定时间暂停或休眠,或者在一周、一个月或一年中的特定时间暂停或休眠时。但是对于调度单个暂停或休眠,这似乎是Ederico所问的问题(这是一个更有意义的要做的事情),应该使用at命令。(您可以通过编辑相关的crontab来使用cron调度单个事件,例如使用sedawk,但这非常复杂和不必要; 使用at即可。) - Eliah Kagan
该问题要求的相关术语并不适用,它只对特定的时间表有用。 - Bruno Pereira
是的,这是一个关于“特定时间”的示例,正如所请求的那样。“但是,我想知道如何使用命令行在绝对时间(例如晚上11点)暂停/休眠。” - cprofitt
1你编辑了你的答案,添加了关于如何使用at的信息,但是你添加的信息不正确。<运算符将右边指定的文件或设备的文本重定向到左边指定的命令的标准输入。如果你想使用<而不是|(就像我的答案中所示),你需要创建一个以pmi action suspend(或pmi action hibernate)为内容的文件。这样的复杂性使得在这里使用|更好。 - Eliah Kagan
作为一个一般的准则,在你的命令中,当cat命令在|的左边时(例如cat foo | bar),你可以用一个<表达式来替换它(bar < foo)。但是,当你的命令中echo命令在|的左边时,这就不能简单地用一个<表达式来替换了。 - Eliah Kagan
感谢解释。现在应该用你的例子进行编辑。aksubuntu团队可以整合这个并使其对未来寻找帮助的人有用。 - cprofitt