Systemd 在系统启动后立即执行用户态下的服务

以前都比较愚蠢,一直以为只有系统服务才可以做到开机后运行,不然就只有用户登录后才可以运行。一直到最近迁移服务器了才开始重新研究这一部分的内容。

先把命令拿出来,只要这一行指令,系统引导后就会自动帮你执行你需要开机执行的程序

sudo loginctl enable-linger $(whoami)

当然也可以不写那个 $(whoami) 或者手动改成你需要的用户名。

服务配置

对于系统服务,用户态服务的配置稍有不同,所以大部分提供给系统服务的服务文件是不能直接使用的。

首先便是 Install 这一块,系统服务一般写的是 multi-user.target

[Install]
WantedBy=multi-user.target

而用户服务,则需要改写成 default.target

[Install]
WantedBy=default.target

另,用户的服务也不能依赖系统的服务。因为用户服务的 systemd 主进程和系统服务的 systemd 主进程是相互独立的,所以没办法用显式依赖的方式来只依赖声明。但是依赖 target 还是可以的。

配置服务自动启动

只需要使用下列命令就行,记得用户态的服务务必加上 --user

systemctl --user enable <your service>.service

致谢

特别感谢 Billchen 为我提供了自动启动的思路