我在写了一个自启动服务,开机启动一个可执行文件,现象是这个可执行程序无法读写同级目录下的另一个文件。
程序调试时没问题,可以正常读写。但放到开机自启动就不行了,开机没有写入数据,查看服务和进程都在运行。
我打开文件的路径是直接用文件名打开,fopen("a.txt","r"),是不是这个在自启动时就是另一个位置了,所以没能正常读写文件?换成fopen("./a.txt","r")是不是可以了?请问有人可以说说这两者有什么区别吗,感谢
Ubuntu systemctl 自启动路径问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。
在Ubuntu系统中使用
systemd配置自启动服务时,你遇到的文件读写问题可能与可执行程序运行时的工作目录(working directory)有关。当通过systemctl启动服务时,默认的工作目录并不是你期望的可执行文件所在目录。-
使用
fopen("a.txt", "r")时,程序会在当前工作目录下查找名为 "a.txt" 的文件。如果服务启动时的工作目录不是你的可执行文件所在的目录,那么它将无法找到并打开这个文件。 -
而使用
fopen("./a.txt", "r"),则明确指示了程序应该在当前工作目录下查找 "a.txt" 文件。这里的./表示当前目录,这样即使工作目录发生变化,只要相对于可执行文件本身来说 "a.txt" 是同级目录下的文件,它就能够正确地找到并打开该文件。
要解决这个问题,你可以通过在
systemd的服务单元配置文件(通常位于/etc/systemd/system/your-service-name.service)中的WorkingDirectory=参数指定服务启动时的工作目录为可执行文件所在的目录:[Unit] Description=Your Service Description [Service] ExecStart=/path/to/your/executable WorkingDirectory=/path/to/your/executables/directory [Install] WantedBy=multi-user.target这样一来,当服务启动时,其工作目录就会被设置为你期望的路径,从而使得
fopen("./a.txt", "r")能够正常工作。本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用-