我习惯使用以下方法快速设置一些提醒:
sleep $duration; notify-send $reminder_message
但最近我不得不四处走动,经常换办公桌。我注意到我的$reminder_message
到达时间开始比预期的晚。原来,罪魁祸首是:当我关闭盖子时,它会根据我的sleep
命令暂停一切。
以下是我的发现:
date; echo $duration; date -d "+$duration sec"; sleep "$duration"s; date
如果我在上述命令之间关闭盖子,则:date
和date -d "+$duration sec"
不匹配。但是,如果盖子没有关闭,则它们匹配!
因此,为了快速修复,我已使用以下方法禁用了使用盖子关闭的暂停功能:
HandleLidSwitch=ignore
(下列的这个 ask-ubuntu 答案)
现在我的睡眠命令可以按我的意愿工作了。但我觉得完全禁用暂停功能是一种太过激进修复和一个过度杀伤!
有没有更简单的解决方案?我只希望sleep
当我合上盖子时我的命令不会被打断。
答案1
无意冒犯,但我们这里可能有一个 XY 问题。你认为你的解决方案真实的问题在于sleep
可能有误。sleep
检查直到指定的时间过去,并且当计算机进入睡眠状态时该时间停止。
相反,考虑使用at
命令来安排特定作业在特定时间执行。
at
工作原理如下:
echo "command_to_be_run" | at +30 minutes
将在 30 分钟后安排一项工作。
at
与 非常相似cron
,但作业只运行一次。默认情况下不安装,但可以使用 进行安装sudo apt install at
。