如何使用普通用户身份添加systemd服务?

作者站长头像
站长
· 阅读数 24

我希望能完全使用普通用户身份, 完成一个 systemd services 的添加;

要求

  1. 不使用 root 或 sudo;
  2. 不需要进入到 /etc 下的目录;
  3. 做到用 systemctl start service_name 的效果;

我搜索了些资料, 提到将服务单元文件放置在 ~/.config/systemd/user/ 路径下;但是 systemctl 找不到单元文件;使用 systemctl --user 时,会报错: Failed to get D-Bus connection: No such file or directory;

想请教应该怎么操作, 感谢支持!!

回复
1个回答
avatar
test
2024-07-17

最后还是自己来回答这个问题吧。

centos7 下的普通用户不能创建自己的 systemd 服务,原因应该是 systemd 版本不够;

而其它更高版本的是OK的,如 el8,el9,fedora37,debian11;

一般普通用户创建systemd服务的流程:

  1. ~/.config/systemd/user/xxxx.services
  2. systemctl --user daemon-reload
  3. systemctl --user start xxxx.services
  4. systemctl --user enable xxxx.services

但这样还存在一个问题,就是开机的时候,服务并不会自动启动,而是要普通用户登录时才启动;而且普通用户在退出登录后,服务进程就会被结束,再次登录则又被启动;

所以如果是需要持久性的服务,还是必须用 root 用户操作至少一次。

loginctl enable-linger <username>执行这条命令,即留存用户的状态,达到这个用户退出后,systemd启动的进程依旧保留的效果。

如果只是希望有个普通用户进程能开机启动,并且完完全全的避开 root;推荐还是用老办法(crontab) 例如:@reboot /dir/bin/xxxx

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容