Linux系统下Go程序工作目录差异及启动问题解决方案
Go程序在Linux系统中,不同的启动方式会影响
获取的工作目录,从而引发配置文件读取错误等问题。本文分析
和
两种启动方式下
返回路径不同的原因,并提供解决方案。
问题:
使用
启动Go程序时,
能正确返回工作目录,配置文件读取正常。但使用
启动时,
却返回
根目录,导致配置文件读取失败,程序启动异常。
原因:
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
这源于两种启动方式下程序的工作目录不同:
继承启动命令的当前目录,而
默认工作目录为
。
解决方案:
在
的service配置文件中,添加
选项,显式指定Go程序的工作目录。例如,Go程序可执行文件位于
,则在
service文件中添加:
通过设置
,
启动的Go程序将拥有正确的工作目录,
返回预期路径,从而避免配置文件读取错误,确保程序正常运行。
systemctlos.Getwd()nohup ./main &systemctlos.Getwd()nohup ./main &os.Getwd()systemctlos.Getwd()/nohup ./main &systemctl/systemctlWorkingDirectory/home/user/myproject/systemctl[Service]
WorkingDirectory=/home/user/myproject/
# ... 其他配置 ...WorkingDirectorysystemctlos.Getwd()