禁止 ubuntu server 自动休眠

禁止 ubuntu server 自动休眠/systemctl mask 操作

虽然一般情况下 ubuntu server 系统并不会自动休眠,但是有时候还是会出现这样的奇怪现象。借此记录一下systemctl mask操作。并且操作也适用于 desktop 系统。
查看自动休眠服务

$ systemctl status sleep.target
 ● sleep.target - Sleep
    Loaded: loaded (/lib/systemd/system/sleep.target; static; vendor preset: enabled)
    Active: inactive (dead)
      Docs: man:systemd.special(7)

正常情况下应该像上面这样inactive,如果要完全解决这个问题,可以使用systemctl mask指令。

systemctl mask

一般情况下我们是通过systemctl enablesystemctl disable来设置服务的开机自启动和关停自启动,其原理是:

  • enable 会在/etc/systemd/system/目录下创建需要的软链接,指向/usr/lib/systemd/system/目录中的文件,以此来使得服务自启动。
  • disable则是删除这个软链接,这样服务就不会自启动。

但是被 disable 的服务只是不会开机自启动,别的进程依旧可以启动这个服务。使用systemctl start就可以正常启动。
所以被 disable 的服务也可能运行。
想要彻底让一个服务失能,我们可以把它屏蔽

  • mask 建立一个指向/dev/null的符号链接
  • $ systemctl mask your_service
    Created symlink from /etc/systemd/system/your_service.service to /dev/null.
    

这样就算有别的进程通过 start 指令想要启动服务,也只会因为指向 null 而失败。
想要取消这种屏蔽使用 unmask 指令

$ systemctl unmask your_service

屏蔽sleep.target

sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
 Created symlink /etc/systemd/system/sleep.target → /dev/null.
 Created symlink /etc/systemd/system/suspend.target → /dev/null.
 Created symlink /etc/systemd/system/hibernate.target → /dev/null.
 Created symlink /etc/systemd/system/hybrid-sleep.target → /dev/null.

这样就把和自动休眠相关的服务屏蔽了。