Debian 服务相对于文件的行为

Debian 服务相对于文件的行为

我目前有一个可执行文件,这是我正在开发的 C 程序。它加载一个配置文件 - 根据该文件它将具有特定的行为。这已经过测试,并且当我从 shell 启动它时可以工作。

但是我希望它随系统一起启动,因此我为它提供了一项服务。该服务只是在启动时启动我的可执行文件。

这样做时,程序将始终具有默认行为,就好像文件被忽略一样。

发生这种情况是有原因的吗?我目前的猜测是,程序可能会在文件因某种原因尚未准备好访问时启动(正如我的程序按预期在帧缓冲区上写入,早在用户可以通过串行端口登录系统之前)。

我不知道这是否正确,以及如何解决它。提前致谢。

答案1

可执行文件是否在当前工作目录中寻找配置文件?如果是这样,那么您应该知道,在启动时启动的任何服务通常都会将其工作目录设置为 ,/除非该服务另有明确说明。

.service文件中,您可以使用类似这样的行

WorkingDirectory=/home/user/demo

启动已cd到达所需目录的服务进程。请参阅man systemd.exec了解更多详情。

或者可执行文件是否尝试使用环境变量的值HOME作为配置文件路径名的一部分?服务根本不需要HOME设置环境变量。如有必要,您可以将其设置在.service文件中,其中包含以下行:

Environment="HOME=/home/user"

然而,对于一个应该作为 systemd 服务运行的程序来说,这有点出乎意料。您可能想使用其他一些环境变量来代替HOME,并明确记录它。

在程序中,您可能希望将配置文件的位置指定为完整路径名(如果您尚未这样做)。

相关内容