我打算每天晚上让电脑进入睡眠状态,第二天早上再唤醒它。我发现 rtcwake 可以满足我的目的。但是把它放在 crontab 中没有任何作用。以下是我的“root”用户的 crontab 条目
0 1 * * * rtcwake -m disk -s 25200
我使用“sudo crontab -e”添加了它。系统日志显示它执行了该命令,但计算机没有进入睡眠状态。如果我直接在终端上运行该命令,计算机会立即进入睡眠状态,正如预期的那样。所以我认为 ACPI 没有任何问题。
有人知道吗?我使用的是 Ubuntu 14.04
答案1
我知道这已经晚了两年,但我遇到了同样的问题,并想向将来可能遇到此问题的任何人提供我的解决方案。
为了每天 06:00 唤醒我的机器,我使用 设置了一个 cronjob rtcwake
。但我的问题是,即使 cronjob 运行了,它也没有设置闹钟。我确实使用 编辑了 root 用户crontab
的sudo crontab -e
。
解决方案是在 crontab 中使用 的完整路径rtcwake
,而不仅仅是命令。为此,首先使用which rtcwake
将返回命令的完整路径(在我的情况下是/usr/sbin/rtcwake
)并在 cronjob 中使用它。
我的 cronjob 现在看起来像这样:
0 12 * * * /usr/sbin/rtcwake -m no -t $(date +\%s -d 'tomorrow 0600')
附注:如果您date
像我一样使用,则必须转义百分号。
答案2
好的,我想我已经找到解决方案了。在 rtcwake 之前添加 sudo 可以解决问题。
但是我现在有以下疑问:为什么 root 的 crontab 需要 sudo 才能运行命令。它不是已经在 root 下运行了吗?
答案3
我对此做了一些调查,如果您在没有 sudo 的情况下在表内使用 rtcwake 执行“sudo crontab -e”,您将收到错误消息:
/home/leo/autojob: line 4: rtcwake: command not found
似乎虽然“sudo crontab -e”是在 root 帐户下执行的,但它找不到正确的命令路径。还有一些其他帖子说你应该在 crontab 前面加上 PATH 等等。只要你在 rtcwake 命令前面加上 sudo,它似乎就能再次找到该命令。
# m h dom mon dow command
40 14 * * * sudo /home/leo/autojob >> /home/leo/cron_log 2>&1
sudo crontab 中的上述配置现在可以工作了,“autojob”是包含 rtcwake 的脚本。