Ubuntu 16.04-在预定时间后从暂停/睡眠状态进入休眠状态
似乎在Ubuntu 16.04上有些不同,所以我采取了一些措施使其工作:
确保休眠运行时按预期运行
systemctl hibernate
复制原始suspend.target文件:
sudo cp /lib/systemd/system/suspend.target /etc/systemd/system/suspend.target
然后编辑文件/etc/systemd/system/suspend.target并添加以下行:
Requires=delayed-hibernation.service
到该[Unit]文件的部分。
创建/etc/systemd/system/delayed-hibernation.service具有以下内容的文件:
[单元]
描述=延迟休眠触发器
之前= suspend.target
Conflicts = hibernate.target hybrid-suspend.target
StopWhenUnneeded = true
[服务]
类型=单发
RemainAfterExit =是
ExecStart = / usr / local / bin / delayed-hibernation.sh预先挂起
ExecStop = / usr / local / bin / delayed-hibernation.sh挂起后
[安装]
WantedBy = sleep.target
/etc/delayed-hibernation.conf使用以下内容为脚本创建配置文件:
#'delayed-hibernation.sh'脚本的配置文件
#指定计算机进入休眠模式之前要花费的时间(以秒为单位)
超时= 1200 #in秒,给出20分钟
创建实际将完成艰苦工作的脚本。
创建/usr/local/bin/delayed-hibernation.sh内容如下的文件:
#!/ bin / bash
#脚本名称:delay-hibernation.sh
#目的:一段时间睡眠后自动进入休眠状态
#在`$ hibernation_conf`文件中编辑`TIMEOUT`变量以设置睡眠秒数。
hibernation_lock ='/ var / run / delayed-hibernation.lock'
hibernation_fail ='/ var / run / delayed-hibernation.fail'
hibernation_conf ='/ etc / delayed-hibernation.conf'
#检查配置文件
如果[!-f $ hibernation_conf]; 然后
echo“缺少配置文件('$ hibernation_conf'),正在中止。”
1号出口
科幻
hibernation_timeout = $(grep“ ^ [^#]” $ hibernation_conf | grep“ TIMEOUT =” | awk -F'=''{print $ 2}'| awk -F'#''{print $ 1}'| tr -d '[[\ t]]')
如果[“ $ hibernation_timeout” =“”]; 然后
“在配置文件('$ hibernation_conf')中缺少'TIMEOUT'参数,正在中止。
1号出口
小精灵[[!“ $ hibernation_timeout” =〜^ [0-9] + $]]; 然后
“ echo”配置文件('$ hibernation_conf')中错误的'TIMEOUT'参数('$ hibernation_timeout'),预期的秒数,正在中止。
1号出口
科幻
#处理给定参数
如果[“ $ 2” =“暂停”]; 然后
curtime = $(日期+%s)
如果[“ $ 1” =“ pre”]; 然后
如果[-f $ hibernation_fail]; 然后
echo“检测到休眠失败,跳过设置RTC唤醒计时器。”
其他
回声“检测到挂起。录制时间,设置RTC计时器”
echo“ $ curtime”> $ hibernation_lock
rtcwake -m no -s $ hibernation_timeout
科幻
elif [“ $ 1” =“ post”]; 然后
如果[-f $ hibernation_fail]; 然后
rm $ hibernation_fail
科幻
如果[-f $ hibernation_lock]; 然后
sustime = $(cat $ hibernation_lock)
rm $ hibernation_lock
如果[$(($ curtime-$ sustime))-ge $ hibernation_timeout]; 然后
echo“检测到从挂起自动恢复。正在休眠...”
systemctl休眠
如果[$?-ne 0]; 然后
echo“自动休眠失败。尝试暂停。”
触摸$ hibernation_fail
systemctl暂停
如果[$?-ne 0]; 然后
“自动休眠和挂起故障转移失败。没有其他尝试。
科幻
科幻
其他
echo“检测到从暂停中手动恢复。清除RTC计时器”
rtcwake -m禁用
科幻
其他
回声“找不到文件'$ hibernation_lock',无所事事”
科幻
其他
回声“无法识别的第一个参数:'$ 1',预期为'pre'或'post'”
科幻
其他
echo“此脚本旨在由systemctl delay-hibernation.service运行(预期的第二个参数:'suspend')”
科幻
使脚本可执行:
chmod 755 /usr/local/bin/delayed-hibernation.sh
我的脚本版本尝试处理许多问题,例如,如果休眠不成功,则再次进入挂起状态,但是在预定的时间后一遍又一遍不唤醒。
我认为最后一步就是执行
sudo systemctl daemon-reload
sudo systemctl enable delayed-hibernation.service
确保使用新的服务/配置。
要检查服务日志,可以使用:
sudo systemctl status延迟休眠服务
或完整的服务使用日志:
sudo journalctl -u延迟休眠服务
我从运行的服务中获得的普通日志是:
mile @ mile-ThinkPad:〜$ sudo systemctl状态延迟-休眠。服务
●延迟休眠服务-延迟休眠触发
已加载:已加载(/etc/systemd/system/delayed-hibernation.service;已启用;供应商预设:已启用)
有效:无效(无效)
Jun 09 20:35:42 mile-ThinkPad systemd [1]:启动延迟的休眠触发...
Jun 09 20:35:42 mile-ThinkPad delay-hibernation.sh [2933]:检测到挂起。记录时间,设置RTC计时器
Jun 09 20:35:42 mile-ThinkPad delay-hibernation.sh [2933]:rtcwake:假设RTC使用UTC ...
Jun 09 20:35:42 mile-ThinkPad delay-hibernation.sh [2933]:rtcwake:使用/ dev / rtc0在2016年6月9日星期四进行唤醒
Jun 09 20:55:44 mile-ThinkPad systemd [1]:启动了延迟的休眠触发。
Jun 09 20:55:44 mile-ThinkPad systemd [1]:延迟休眠。服务:不再需要该装置。停下来
Jun 09 20:55:44 mile-ThinkPad systemd [1]:正在停止延迟的休眠触发...
Jun 09 20:55:44 mile-ThinkPad delay-hibernation.sh [3093]:检测到从挂起自动恢复。冬眠中...
Jun 09 20:55:44 mile-ThinkPad systemd [1]:已停止延迟的休眠触发。
mile @ mile-ThinkPad:〜$
就是这样,我希望这确实对某人有帮助,因为我花了几天的时间来弄清楚配置和脚本版本的正确组合,以使此便捷功能正常工作。