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