我目前有一个可执行文件,这是我正在开发的 C 程序。它加载一个配置文件 - 根据该文件它将具有特定的行为。这已经过测试,并且当我从 shell 启动它时可以工作。
但是我希望它随系统一起启动,因此我为它提供了一项服务。该服务只是在启动时启动我的可执行文件。
这样做时,程序将始终具有默认行为,就好像文件被忽略一样。
发生这种情况是有原因的吗?我目前的猜测是,程序可能会在文件因某种原因尚未准备好访问时启动(正如我的程序按预期在帧缓冲区上写入,早在用户可以通过串行端口登录系统之前)。
我不知道这是否正确,以及如何解决它。提前致谢。
答案1
可执行文件是否在当前工作目录中寻找配置文件?如果是这样,那么您应该知道,在启动时启动的任何服务通常都会将其工作目录设置为 ,/
除非该服务另有明确说明。
在.service
文件中,您可以使用类似这样的行
WorkingDirectory=/home/user/demo
启动已cd
到达所需目录的服务进程。请参阅man systemd.exec
了解更多详情。
或者可执行文件是否尝试使用环境变量的值HOME
作为配置文件路径名的一部分?服务根本不需要HOME
设置环境变量。如有必要,您可以将其设置在.service
文件中,其中包含以下行:
Environment="HOME=/home/user"
然而,对于一个应该作为 systemd 服务运行的程序来说,这有点出乎意料。您可能想使用其他一些环境变量来代替HOME
,并明确记录它。
在程序中,您可能希望将配置文件的位置指定为完整路径名(如果您尚未这样做)。