是否有类似每个用户的守护程序?


11

我需要运行某些后台进程,这些后台进程只要与某个用户登录就可以正常运行。

是否存在类似每用户守护程序的东西?我只知道从计算机启动一直生存到关闭(或手动启动/杀死)的全局守护程序。

现在,我制作了一个脚本,用于检查该进程是否已经存在,如果不存在则创建该进程。然后使用nohupmy中的命令运行此脚本.profile。这样,该过程将在启动时启动,并且仅启动一次(即使有多个rxvt术语来回执行)。但是,它在登录后再也不会被杀死(这不是灾难,但是终止该过程也更干净)。

Answers:


9

systemd允许用户运行自己的systemd实例来管理专用守护程序。

如果您已经安装了systemd,则只需systemd --user运行运行并启动和管理服务systemctl --user。将在中搜索用户服务~/.config/systemd/user

默认情况下,systemd将在注销时终止用户服务(根据您的要求)。可以通过使用loginctl --enable-linger $USER命令为用户保留时间来更改此行为。

您可以在ArchWiki页面上找到更多信息。


1
是否有一个设置可以使启用延迟从配置文件(而不是bash命令)运行。
CMCDragonkai 2014年

4

dbus服务的目的在于……好吧,它可以用于:-)。每用户dbus守护进程在用户登录到桌面环境时启动,并在用户注销时终止(请参见dbus-launch和选项的手册页--exit-with-session)。可以与dbus实例一起启动dbus服务,也可以在首次通过dbus调用服务的接口时启动它。每个用户可以有自己的dbus服务规范,可以在用户主目录的隐藏目录中定义,也可以在中全局定义/etc。有关大量文档和参考实现,请参见freedesktop上的dbus主页

这些天我只使用基于Debian的发行版。所有这些脚本都具有脚本,/etc/X11/Xsession.d其中经常会修改一个字符串,该字符串最后将被评估为启动所选桌面环境的命令。dbus有一个这样的脚本,该脚本在dbus包装器之前添加了命令dbus-launch。这个包装器启动了一个dbus服务器,并且至少在香草Debian上(我愿意说“在所有基于Debian的发行版上”)dbus-launch都可以选择--exit-with-session

您应该能够在用户登录dbus服务时包装要运行的进程,并且IIRC dbus在退出前自动负责终止其服务。


2

如果您使用BASH作为外壳程序,则可以尝试在〜/ .bash_logout中进行一些检测并关闭正在运行的进程。

从长远来看,您可能正在寻找的是与ConsoleKit或systemd的logind之类的东西进行交互(例如,通过D-Bus)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.