计算机运行一段时间进入到休眠,如何自动从挂起进入休眠状态?

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:〜$

就是这样,我希望这确实对某人有帮助,因为我花了几天的时间来弄清楚配置和脚本版本的正确组合,以使此便捷功能正常工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值