我一直在寻找解决方案,让我的电脑每天在东部标准时间凌晨 1 点进入睡眠状态,并在东部标准时间下午 6 点唤醒。到目前为止,我还没有成功。
我尝试使用 rtcwake 和 cronjobs 以及此处的脚本:
甚至在其他论坛上我也无法让它发挥作用。
非常感谢您的帮助。
附言:我已启用磁盘加密,因此我无法休眠。
答案1
从航站楼:
挂起并在 60 秒后唤醒:
sudo rtcwake -m disk -s 60
今天 16.00 暂停并唤醒
sudo rtcwake -m no -l -t "$(date -d 'today 16:00:00' '+%s')"
暂停并于明天 10.00 唤醒:
sudo rtcwake -m no -l -t $(date +%s -d 'tomorrow 10:00')
暂停和唤醒具体日期和时间:
sudo rtcwake -m no -l -t "$(date -d '2017-04-25 16:00:00' '+%s')"
停机维护使用:
sudo shutdown -P +60 "The system is going DOWN to maintenance mode in 60 minutes!"
sudo shutdown -P 22:10 "The system is going DOWN to maintenance mode at 22:10!"
使用自动关机:
下载自动关机:
wget https://github.com/deragon/autopoweroff/releases/download/3.0.0/autopoweroff-3.0.0-1.noarch.deb
安装自动关机:
sudo dpkg -i autopoweroff-3.0.0-1.noarch.deb
sudo apt-get install -f
答案2
您正在遵循的脚本过于复杂。描述了一种更简单的方法这里。
在全面实行凌晨 1 点睡觉、早上 6 点起床之前,你可以做一个简单的 10 秒测试:
sudo rtcwake -m mem -s 10 && firefox
此测试将确保挂起到 RAM 确实有效。恢复后将firefox
自动启动。
不用摆弄 UTC,让您的rtcwake
命令cron
在凌晨 1 点调用,并在几秒后唤醒18000
。您的 cron 表条目将如下所示:
0 1 * * * sh /usr/sbin/rtcwake -m mem -s 18000 >> /home/Me/SuspendResume.log 2>&1
由于使用 sudo 权限运行,因此不需要sudo
前缀。cron
替换Me
为您的用户名。定期检查文件SuspendResume.log
中的 cron 消息,并在出现问题时检查。2>&1
选项将错误消息重定向到.log
文件。
注意事项
- RTC 代表实时时钟。rtcwake 使用计算机的硬件时钟(您可以在 BIOS 中设置)来确定何时唤醒计算机。如果您使用的是旧计算机,CMOS 电池电量耗尽,无法让时钟正常运行,则此方法将不起作用。
- 如果睡眠、挂起到 RAM 或休眠模式在您的 Linux 系统上不能正常工作 - 可能是因为 Linux 没有驱动程序使它们在您的硬件上正常工作 - 这可能无法工作。
- 将笔记本电脑设置为在特定时间自动唤醒时要小心。您肯定不希望它在笔记本电脑包中被唤醒、运行、过热或耗尽电池。
答案3
我希望我的计算机每天晚上当地时间 11:59 进入睡眠状态,每天早上 9:00 唤醒。
我知道 cronjobs 可以帮助解决这个问题。
我使用了一个工具(例如https://cron.help/#59_23_*_*_*) 向我展示我想要的入睡时间表的正确语法是59 23 * * *
。
然后我需要计算睡眠应该持续多少秒:上午 9:00 是晚上 11:59 后 9 小时 + 1 分钟。(9 * 60 + 1)* 60 = 32460 秒
因此我运行crontab -e
通过 vim 编辑 cron 作业并添加了以下两行:
# inspired by https://askubuntu.com/a/1348204/48214 and https://askubuntu.com/a/1012051/48214 and https://itectec.com/ubuntu/ubuntu-automatically-sleep-and-wake-up-at-specific-times/
59 23 * * * /usr/sbin/rtcwake -m disk -s 32460 >> /code/cron.log 2>&1
我保存了该文件。
上述步骤适用于大多数计算机上的大多数人,但不幸的是,我意识到这个快速测试我那台古老的电脑有问题rtcwake
。
因此,我现在使用的只是按照计划暂停我的计算机,而我还没有弄清楚如何安排唤醒:
59 23 * * * echo "$(date) Running /usr/local/bin/systemctl-suspend" >> /code/cron.log && /usr/local/bin/systemctl-suspend >> /code/cron.log 2>&1