如何在任何 Linux 中自动启动服务?

如何在任何 Linux 中自动启动服务?

我需要安装最愚蠢的服务(二进制文件),并让它在启动时(或登录时,无论如何)以当前用户身份在尽可能多的平台(老化的销售点类型)可靠地运行。该应用程序监视用户会话中另一个应用程序生成的另一个档案。

考虑的启动替代方案:

  1. 初始化文件
  2. crontab 中的 @reboot
  3. ~/.config/autostart 中的 .desktop 文件
  4. 许多其他解决方案,包括 .profile 和 .bashrc

以上所有方法在某个时候都会失效。问题源于不想以 root 身份运行(我希望生成的文件可供用户访问),并且没有办法在所有平台上可靠地获取 sudo 中的当前用户名。理想情况下,甚至不能假设 sudo 可用。

嘿,我只想在启动时运行一些程序,而且我有“root”权限来执行此操作。Windows 可以轻松完成这项工作。这不是火箭科学,不是吗?

答案1

我建议使用守护进程工具管理您的服务。

它使用监控程序来监控您的服务,并以守护进程的形式运行。您可以编写一个简单的运行脚本来执行该脚本,守护进程工具会将其与当前终端分离,并为您提供单独的日志以供故障排除。

答案2

在所有 Linux 安装中,唯一可以保证(某种程度上)相同的就是内核,因为内核才是 Linux 的基础。

内核有一个命令行参数init,它指定负责引导的二进制文件的路径和名称用户空间环境在内核初始化完成后。通常/sbin/init用于此目的,但它可以替换为您喜欢的任何其他二进制文件(以及所需的库、配置文件等),这些二进制文件可在根文件系统上使用。

然而,这可能不是你想要的。

除此之外,您所做的一切几乎都会在某种程度上取决于已安装软件的行为。甚至无法保证 init 二进制文件位于 /sbin/init。

大多数面临此问题的软件都会通过提供几种可能的初始化配置来解决此问题,并让安装脚本(或让管理员)选择适合相关系统的配置;如果没有提供合适的配置,则管理员需要自己编写配置。

很遗憾,这是大多数 Linux 发行版提供的多功能性的缺点。在 Windows 中,只有一种方法可以做到这一点(好吧,有几种,但它们是由 Microsoft 明确定义的,即使您是精通程序员的管理员,也无法真正做任何事情来更改它们)。

问题源于不想以 root 身份运行(我希望生成的文件可供用户访问)

如果这是你唯一的问题,然而,简单的解决办法是创建文件后立即更改其所有权。或者,按照大多数守护进程的做法:以 root 身份启动,然后放弃特权并切换到非特权帐户完成以 root 身份需要进行的任何初始化之后(例如,打开套接字以监听特权端口、将受保护的配置文件读入内存等)。

我认为可以通过编程确定登录用户,但您需要更具体说明“登录用户”的具体含义。通过扫描进程树,检测哪个用户帐户(如果有)正在运行特定二进制文件相当简单,而且可能让您足够接近您想要实现的目标。一旦您知道要针对哪个用户帐户,您就可以将您的安全上下文切换到该帐户,或者以该用户身份启动单独的进程(类似于 sudo 的 grunt 工作方式)。

相关内容