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

我希望能完全使用普通用户身份, 完成一个 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;

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

阅读 4.4k
1 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题