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 为我提供了自动启动的思路